﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using GiaoXuLanTranh_MucVu.Models;
using InfoTech.Core.Data;
using InfoTech.Core.Data.SqlClient;
using InfoTech.Data.Linq;
using InfoTech.LanTranh.MucVu.Bussiness;
using InfoTech.LanTranh.MucVu.Service;
using InfoTech.Mvc.JqGrid;
using InfoTech.Mvc.JqGrid.LINQ;
using InfoTech.Mvc.LanTranh.MucVu.Models;
using InfoTech.Mvc.HtmlExtensions;

namespace GiaoXuLanTranh_MucVu.Areas.AdminCP.Controllers
{
    [Authorize]
    public class
        GiaDinhCongGiaoController : Controller
    {

        #region Ho Gia Dinh

        public ActionResult HoGiaDinh(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Danh mục Gia Đình Công Giáo - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult Get_List_HoGiaDinh()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            //IQueryable<GIAODAN> query = dataContext.GetTable<GIAODAN>().
            //    Join(dataContext.GetTable<HOGIADINH>().Where(c => c.MAGIAOHO + "" == id || string.IsNullOrEmpty(id)), c => c.MAGIAODAN, v => v.MACHUHO, (c, v) => c);

            var query1 = dataContext.GetTable<GIAODAN>().Where(grid).Join(dataContext.GetTable<HOGIADINH>().Where(grid), c => c.MAGIAODAN,
                                                                   v => v.MACHUHO, (c, v) => new
                                                                                                 {
                                                                                                     v.MAHOGIADINH,
                                                                                                     c.TENTHANH,
                                                                                                     c.HOVATENDEM,
                                                                                                     c.TEN,
                                                                                                     c.TENCHA,
                                                                                                     c.TENME,
                                                                                                     v.DIACHI,
                                                                                                     c.MAGIAOHO,
                                                                                                     v.HOGIADINHID,
                                                                                                     EDIT = Format_HoGiaDinh_Edit(v.MAHOGIADINH)
                                                                                                 });

            IQueryable<dynamic> query;
            if (typeof(GIAOHO).CheckPropertyInfo(grid))
                query = query1.Join(dataContext.GetTable<GIAOHO>().Where(grid), c => c.MAGIAOHO, v => v.MAGIAOHO, (c, v) => new
                                                                                                                    {
                                                                                                                        c.MAHOGIADINH,
                                                                                                                        c.TENTHANH,
                                                                                                                        c.HOVATENDEM,
                                                                                                                        c.TEN,
                                                                                                                        c.TENCHA,
                                                                                                                        c.TENME,
                                                                                                                        c.DIACHI,
                                                                                                                        v.TENGIAOHO,
                                                                                                                        c.EDIT,
                                                                                                                        c.HOGIADINHID
                                                                                                                    });
            else
            {
                query = query1.GroupJoin(dataContext.GetTable<GIAOHO>(), c => c.MAGIAOHO, v => v.MAGIAOHO,
                                         (c, v) => new { c, v })
                    .SelectMany(t => t.v.DefaultIfEmpty(), (t, v) => new
                                                                         {
                                                                             t.c.MAHOGIADINH,
                                                                             t.c.TENTHANH,
                                                                             t.c.HOVATENDEM,
                                                                             t.c.TEN,
                                                                             t.c.TENCHA,
                                                                             t.c.TENME,
                                                                             t.c.DIACHI,
                                                                             t.c.EDIT,
                                                                             v.TENGIAOHO,
                                                                             t.c.HOGIADINHID
                                                                         });
            }

            //filtering)


            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        private string Format_HoGiaDinh_Edit(Guid MAHOGIADINH)
        {
            string result = string.Format("<img src=\"{0}icons/pencil.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP"), Url.Action("EditHoGiaDinh", new { id = MAHOGIADINH }));
            return result;
        }

        public ActionResult AddHoGiaDinh(string id)
        {
            if (!string.IsNullOrEmpty(id))
            {
                Guid guid;
                if (Guid.TryParse(id, out guid))
                {
                    GIAODAN giaodan = new GIAODAN();
                    giaodan.MAGIAODAN = guid;
                    giaodan.SelectbyId();
                    if (giaodan.IsPersistence)
                    {
                        if (giaodan.REF_HOGIADINH.Count() > 0)
                            return RedirectToAction("ChuyenChuHoGiaDinh", new { id = id });
                        if (giaodan.REF_HOGIADINH_GIAODAN.Count() > 0)
                        {
                            EXCEPTION exception = new EXCEPTION();
                            exception.RESULTTYPE = ResultType.ATTENTION;
                            exception.MESSAGE =
                                "Giáo dân đã thuộc hộ gia đình<br/>Tạo mới hộ sẽ xóa khẩu giáo dân khỏi hộ cũ";
                            exception.Insert();
                            ViewData["Result"] = exception.EXCEPTIONID;
                        }
                        Header header = new Header();
                        header.Common = "ViewUserControl_AddHoGiaDinh";
                        header.CurentCommon = "HoGiaDinh";
                        header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                        header.PageHeader = "Thêm Hộ Gia Đình - Mục Vụ";
                        header.Menulv1 = "02";
                        header.Menulv2 = "0201";
                        ViewData[Header.Key] = header;
                        ViewData["ID"] = id;

                        HOGIADINHModel hogiadinhModel = new HOGIADINHModel();
                        hogiadinhModel.MACHUHO = giaodan.MAGIAODAN;
                        hogiadinhModel.MAQUOCGIA = giaodan.MAQUOCGIA;
                        hogiadinhModel.MATINHTHANH = giaodan.MATINHTHANH;
                        hogiadinhModel.MAQUANHUYEN = giaodan.MAQUANHUYEN;
                        hogiadinhModel.MAXAPHUONG = giaodan.MAXAPHUONG;
                        hogiadinhModel.MAGIAOPHAN = giaodan.MAGIAOPHAN;
                        hogiadinhModel.MAGIAOHAT = giaodan.MAGIAOHAT;
                        hogiadinhModel.MAGIAOXU = giaodan.MAGIAOXU;
                        hogiadinhModel.MAGIAOHO = giaodan.MAGIAOHO;
                        hogiadinhModel.DIACHI = giaodan.DIACHI;
                        hogiadinhModel.DIENTHOAI = giaodan.DIENTHOAI;
                        hogiadinhModel.TENCHUHO = String.Format("{0} {1} {2}", giaodan.TENTHANH, giaodan.HOVATENDEM, giaodan.TEN);

                        return View(hogiadinhModel);

                    }
                }
            }

            return RedirectToAction("HoGiaDinh");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddHoGiaDinh(HOGIADINHModel hogiadinhModel, string MAQUANHEGIATOC)
        {
            if (ModelState.IsValid)
            {
                HOGIADINH hogiadinh = hogiadinhModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (HOGIADINHService.Check_Insert_HOGIADINH(hogiadinh))
                {
                    Exception exception;
                    hogiadinh.Insert(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;

                        HOGIADINH_GIAODAN hogiadinhGiaodan = new HOGIADINH_GIAODAN();
                        hogiadinhGiaodan.MAGIAODAN = hogiadinhModel.MACHUHO;
                        hogiadinhGiaodan.MAHOGIADINH = hogiadinh.MAHOGIADINH;
                        Guid guid;
                        if (Guid.TryParse(MAQUANHEGIATOC, out guid))
                            hogiadinhGiaodan.MAQUANHEGIATOC = guid;
                        hogiadinhGiaodan.Insert();

                        //// Delete old belong to family
                        //HOGIADINH_GIAODAN temp = new HOGIADINH_GIAODAN();
                        //temp.MAGIAODAN = hogiadinhModel.MACHUHO;
                        //temp.Select();
                        //if (temp.IsPersistence)
                        //{
                        //    temp.DACHUYENDI = true;
                        //    temp.MAHOGIADINH_CHUYENDI = hogiadinh.MAHOGIADINH;
                        //    temp.UpdatebyId();
                        //}

                        return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh.MAHOGIADINH });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Chủ hộ này đã làm chủ hộ khác. Vui lòng chọn chức năng chuyển chủ hộ và sau đó tiếp tục";
                    ex.Insert();
                    TempData["Result"] = ex.EXCEPTIONID;
                    return RedirectToAction("ChuyenChuHoGiaDinh", new { id = hogiadinhModel.MACHUHO });
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hogiadinhModel);
        }

        public ActionResult EditHoGiaDinh(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HOGIADINH hogiadinh = new HOGIADINH();
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
                if (hogiadinh.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_EditHoGiaDinh_Index";
                    header.CurentCommon = "HoGiaDinh";
                    header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                    header.PageHeader = "Cập nhật Hộ Gia Đình - Mục Vụ";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0201";
                    ViewData[Header.Key] = header;
                    ViewData["MAHOGIADINH"] = hogiadinh.MAHOGIADINH;
                    ViewData["MACHUHO"] = hogiadinh.MACHUHO;

                    HOGIADINHModel hogiadinhModel = new HOGIADINHModel(hogiadinh);
                    if (hogiadinh.PRT_GIAODAN.IsPersistence)
                        hogiadinhModel.TENCHUHO = String.Format("{0} {1} {2}", hogiadinh.PRT_GIAODAN.TENTHANH, hogiadinh.PRT_GIAODAN.HOVATENDEM, hogiadinh.PRT_GIAODAN.TEN);
                    if (hogiadinh.PRT_GIAOHO.IsPersistence)
                        hogiadinhModel.MAHO = String.Format("{0}.{1:00000}", hogiadinh.PRT_GIAOHO.MAHOID, hogiadinh.HOGIADINHID);
                    else
                        hogiadinhModel.MAHO = String.Format("{0:00000}", hogiadinh.HOGIADINHID);
                    return View(hogiadinhModel);
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("HoGiaDinh");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditHoGiaDinh(HOGIADINHModel hogiadinhModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_EditHoGiaDinh_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Hộ Gia Đình - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["MAHOGIADINH"] = hogiadinhModel.MAHOGIADINH;
            ViewData["MACHUHO"] = hogiadinhModel.MACHUHO;

            if (ModelState.IsValid)
            {
                HOGIADINH hogiadinh = hogiadinhModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (HOGIADINHService.Check_Update_HOGIADINH(hogiadinh))
                {
                    Exception exception;
                    hogiadinh.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hogiadinhModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        if (hogiadinh.PRT_GIAOHO.IsPersistence)
                            hogiadinhModel.MAHO = String.Format("{0}.{1:00000}", hogiadinh.PRT_GIAOHO.MAHOID, hogiadinh.HOGIADINHID);
                        else
                            hogiadinhModel.MAHO = String.Format("{0:00000}", hogiadinh.HOGIADINHID);
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hogiadinhModel);
        }

        public ActionResult DeleteHoGiaDinh(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (HOGIADINHService.Check_Delete_HOGIADINH(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var hogiadinh = new HOGIADINH();
                            hogiadinh.MAHOGIADINH = guid;
                            Exception exception;
                            hogiadinh.SelectbyId();
                            if (hogiadinh.IsPersistence)
                            {
                                // Check service here
                                HOGIADINHService.Delete(hogiadinh);
                                hogiadinh.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        public ActionResult ChuyenChuHoGiaDinh(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    EXCEPTION exception = new EXCEPTION();
                    exception.RESULTTYPE = ResultType.ATTENTION;
                    exception.UPDATETYPE = UpdateType.INSERT;
                    if (giaodan.REF_HOGIADINH.Count() > 0)
                    {
                        HOGIADINH hogiadinh = giaodan.REF_HOGIADINH.First();
                        if (hogiadinh.REF_HOGIADINH_GIAODAN.Count() > 1)
                        {
                            Header header = new Header();
                            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
                            header.CurentCommon = "HoGiaDinh";
                            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                            header.PageHeader = "Tìm Kiếm Hộ Gia Đình - Mục Vụ";
                            header.Menulv1 = "02";
                            header.Menulv2 = "0201";
                            ViewData[Header.Key] = header;

                            exception.MESSAGE =
                                                        "Giáo dân này hiện đang là chủ hộ<br/>Vui lòng chọn chủ hộ khác thay thế<br/>Chủ hộ cũ sẽ được xem như là chưa thuộc hộ gia đình nào";
                            exception.Insert();
                            ViewData["Result"] = exception.EXCEPTIONID;
                            ViewData["MAHOGIADINH"] = hogiadinh.MAHOGIADINH;
                            ViewData["MACHUHO"] = id;
                            return View();
                        }
                        else
                        {
                            exception.MESSAGE =
                            "Giáo dân này hiện là chủ hộ<br />Và hộ gia đình hiện có một thành viên";
                            exception.Insert();
                            TempData["Result"] = exception.EXCEPTIONID;
                            return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh.MAHOGIADINH });
                        }
                    }
                    else
                    {
                        exception.MESSAGE = "Giáo dân hiện chưa thuộc hộ gia đình";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("EditGiaoDan", new { id = id });
                    }
                }
            }
            return RedirectToAction("HoGiaDinh");
        }

        public ActionResult ChuyenChuHoGiaDinh2(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    EXCEPTION exception = new EXCEPTION();
                    exception.RESULTTYPE = ResultType.ATTENTION;
                    exception.UPDATETYPE = UpdateType.INSERT;
                    if (giaodan.REF_HOGIADINH.Count() > 0)
                    {
                        HOGIADINH hogiadinh = giaodan.REF_HOGIADINH.First();
                        if (hogiadinh.REF_HOGIADINH_GIAODAN.Count() > 1)
                        {
                            Header header = new Header();
                            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
                            header.CurentCommon = "HoGiaDinh";
                            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                            header.PageHeader = "Tìm Kiếm Hộ Gia Đình - Mục Vụ";
                            header.Menulv1 = "02";
                            header.Menulv2 = "0201";
                            ViewData[Header.Key] = header;

                            exception.MESSAGE =
                                                        "Giáo dân này hiện đang là chủ hộ<br/>Vui lòng chọn chủ hộ khác thay thế<br/>Chủ hộ cũ sẽ được xem như là chưa thuộc hộ gia đình nào";
                            exception.Insert();
                            ViewData["Result"] = exception.EXCEPTIONID;
                            ViewData["MAHOGIADINH"] = hogiadinh.MAHOGIADINH;
                            ViewData["MACHUHO"] = id;
                            return View();
                        }
                        else
                        {
                            exception.MESSAGE =
                            "Giáo dân này hiện là chủ hộ<br />Và hộ gia đình hiện có một thành viên";
                            exception.Insert();
                            TempData["Result"] = exception.EXCEPTIONID;
                            return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh.MAHOGIADINH });
                        }
                    }
                    else
                    {
                        exception.MESSAGE = "Giáo dân hiện chưa thuộc hộ gia đình";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("EditGiaoDan", new { id = id });
                    }
                }
            }
            return RedirectToAction("HoGiaDinh");
        }

        public ActionResult ChuyenChuHo(string id1, string id2, string id3)
        {
            Guid guid = new Guid();
            HOGIADINH hogiadinh = new HOGIADINH();
            HOGIADINH_GIAODAN hogiadinhGiaodan = new HOGIADINH_GIAODAN();
            if (Guid.TryParse(id1, out guid))
            {
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
            }
            GIAODAN chuho = new GIAODAN();
            if (Guid.TryParse(id2, out guid))
            {
                chuho.MAGIAODAN = guid;
                chuho.SelectbyId();
            }
            if (Guid.TryParse(id3, out guid))
            {
                hogiadinhGiaodan.MANHANKHAU = guid;
                hogiadinhGiaodan.SelectbyId();
            }
            EXCEPTION exception = new EXCEPTION();
            if (hogiadinh.IsPersistence && chuho.IsPersistence && hogiadinhGiaodan.IsPersistence)
            {
                if (hogiadinh.PRT_GIAODAN.Equals(chuho) && hogiadinhGiaodan.PRT_HOGIADINH.Equals(hogiadinh))
                {
                    if (!hogiadinh.MACHUHO.Equals(hogiadinhGiaodan.MAGIAODAN))
                    {
                        hogiadinh.MACHUHO = hogiadinhGiaodan.MAGIAODAN;
                        hogiadinh.UpdatebyId();
                        HOGIADINH_GIAODAN temp = new HOGIADINH_GIAODAN();
                        temp.MAGIAODAN = chuho.MAGIAODAN;
                        temp.Select();
                        if (temp.IsPersistence)
                            temp.DeletebyId();
                        exception.RESULTTYPE = ResultType.INFORMATION;
                        exception.MESSAGE = "Cập nhật thành công<br/>Chủ hộ đã được thay đổi";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("AddHoGiaDinh", new { id = id2 });
                    }
                }
            }
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.MESSAGE = "Có lỗi trong quá trình cập nhật<br />Chủ hộ mới được chọn trùng với chủ hộ cũ,";
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("ChuyenChuHoGiaDinh", new { id = hogiadinhGiaodan.MAGIAODAN });

        }

        public ActionResult ChuyenChuHo2(string id1, string id2, string id3)
        {
            Guid guid = new Guid();
            HOGIADINH hogiadinh = new HOGIADINH();
            HOGIADINH_GIAODAN hogiadinhGiaodan = new HOGIADINH_GIAODAN();
            if (Guid.TryParse(id1, out guid))
            {
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
            }
            GIAODAN chuho = new GIAODAN();
            if (Guid.TryParse(id2, out guid))
            {
                chuho.MAGIAODAN = guid;
                chuho.SelectbyId();
            }
            if (Guid.TryParse(id3, out guid))
            {
                hogiadinhGiaodan.MANHANKHAU = guid;
                hogiadinhGiaodan.SelectbyId();
            }
            EXCEPTION exception = new EXCEPTION();
            if (hogiadinh.IsPersistence && chuho.IsPersistence && hogiadinhGiaodan.IsPersistence)
            {
                if (hogiadinh.PRT_GIAODAN.Equals(chuho) && hogiadinhGiaodan.PRT_HOGIADINH.Equals(hogiadinh))
                {
                    if (!hogiadinh.MACHUHO.Equals(hogiadinhGiaodan.MAGIAODAN))
                    {
                        hogiadinh.MACHUHO = hogiadinhGiaodan.MAGIAODAN;
                        hogiadinh.UpdatebyId();
                        exception.RESULTTYPE = ResultType.INFORMATION;
                        exception.MESSAGE = "Cập nhật thành công<br/>Chủ hộ đã được thay đổi";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh.MAHOGIADINH });
                    }
                }
            }
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.MESSAGE = "Có lỗi trong quá trình cập nhật<br />Chủ hộ mới được chọn trùng với chủ hộ cũ,";
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("ChuyenChuHoGiaDinh2", new { id = hogiadinhGiaodan.MAGIAODAN });

        }

        #region Nhân Khẩu

        public ActionResult ViewUserControl_NhanKhau(string id)
        {
            ViewData["ID"] = id;
            return View();

        }

        public ActionResult Get_List_NhanKhau(string id)
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<GIAODAN> query = dataContext.GetTable<GIAODAN>()
                .Join(dataContext.GetTable<HOGIADINH_GIAODAN>().Where(c => c.MAHOGIADINH + "" == id), c => c.MAGIAODAN, c => c.MAGIAODAN, (c, v) => c);

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<GIAODAN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<GIAODAN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<GIAODAN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<GIAODAN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<GIAODAN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Join(dataContext.GetTable<HOGIADINH_GIAODAN>()
                .Where(c => c.MAHOGIADINH + "" == id), c => c.MAGIAODAN, c => c.MAGIAODAN, (c, v) =>
                    new
                    {
                        v.MANHANKHAU,
                        c.TENTHANH,
                        c.HOVATENDEM,
                        c.TEN,
                        GIOITINH = Format_GioiTinh(c),
                        QUANHE = Format_QuanHeGiaToc(v),
                        PRIORITY = Format_QuanHeGiaToc_DoUuTien(v),
                        c.NAMSINH,
                        MAGIAODAN = Format_GIAODAN_Edit(c, v),
                        TATHE = Format_GIAODAN_TATHE(c),
                        DACHUYENDI = Format_GIAODAN_DACHUYENDI(v),
                        CHUYENDEN = Format_GIAODAN_CHUYENDEN(v)
                    }).OrderBy(c => c.PRIORITY).ThenBy(c => c.NAMSINH).ThenBy(c => c.TEN).ThenBy(c => c.HOVATENDEM)
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        private string Format_GIAODAN_CHUYENDEN(HOGIADINH_GIAODAN hogiadinhGiaodan)
        {
            string result = "";
            if (hogiadinhGiaodan.MAHOGIADINH_CHUYENDI.HasValue)
                result = string.Format("<img src=\"{0}HoGiaDinh_ChuyenDi.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditHoGiaDinh", new { id = hogiadinhGiaodan.MAHOGIADINH_CHUYENDI }));
            return result;
        }

        private string Format_GIAODAN_DACHUYENDI(HOGIADINH_GIAODAN hogiadinhGiaodan)
        {
            string result = "";
            if (hogiadinhGiaodan.DACHUYENDI.HasValue)
                if (hogiadinhGiaodan.DACHUYENDI.Value)
                    result = string.Format("<img src=\"{0}DaChuyenDi.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditGiaoDan", new { id = hogiadinhGiaodan.MAGIAODAN }));
            return result;
        }

        private string Format_GIAODAN_Edit(GIAODAN giaodan, HOGIADINH_GIAODAN hogiadinhGiaodan)
        {
            string result = string.Format("<img src=\"{0}icons/pencil.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP"), Url.Action("EditNhanKhau", new { id = hogiadinhGiaodan.MANHANKHAU }));
            result += string.Format("<img src=\"{0}Edit_GiaoDan.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditGiaoDan", new { id = giaodan.MAGIAODAN }));
            return result;
        }

        private string Format_QuanHeGiaToc(HOGIADINH_GIAODAN hogiadinhGiaodan)
        {
            if (hogiadinhGiaodan.PRT_QUANHEGIATOC.IsPersistence)
                return hogiadinhGiaodan.PRT_QUANHEGIATOC.TENQUANHEGIATOC;
            return "";
        }

        private int Format_QuanHeGiaToc_DoUuTien(HOGIADINH_GIAODAN hogiadinhGiaodan)
        {
            if (hogiadinhGiaodan.PRT_QUANHEGIATOC.IsPersistence)
                return hogiadinhGiaodan.PRT_QUANHEGIATOC.PRIORITY.HasValue ? hogiadinhGiaodan.PRT_QUANHEGIATOC.PRIORITY.Value : 0;
            return 0;
        }

        public ActionResult AddNhanThan(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Tìm Kiếm Nhân Thân - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;

            ViewData["ID"] = id;
            return View();
        }

        public ActionResult Get_List_NhanThan()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<GIAODAN> query = from c in dataContext.GetTable<GIAODAN>()
                                        join v in dataContext.GetTable<HOGIADINH_GIAODAN>() on c.MAGIAODAN equals
                                            v.MAGIAODAN into b
                                        from n in b.DefaultIfEmpty()
                                        select new { c.MAGIAODAN, Exit = n.MAGIAODAN == null }
                                            into m
                                            join k in dataContext.GetTable<GIAODAN>() on m.MAGIAODAN equals k.MAGIAODAN
                                            where m.Exit
                                            select k;


            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<GIAODAN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<GIAODAN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<GIAODAN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<GIAODAN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<GIAODAN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new { c.GIAODANID, c.MAGIAODAN, c.TENTHANH, c.HOVATENDEM, c.TEN, c.DANTOC, GIOITINH = Format_GioiTinh(c), c.TENCHA, c.TENME, NAMSINH = c.GetBirthDay() })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddNhanKhau(string id1, string id2)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_AddNhanKhau";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Nhân Khẩu - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id1, out guid))
            {
                HOGIADINH hogiadinh = new HOGIADINH();
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
                if (hogiadinh.IsPersistence)
                {
                    HOGIADINH_GIAODANModel hogiadinhGiaodanModel = new HOGIADINH_GIAODANModel();
                    hogiadinhGiaodanModel.MAHOGIADINH = guid;
                    ViewData["CHUHO"] = hogiadinh.PRT_GIAODAN;
                    ViewData["HOANCANHKINHTE"] = hogiadinh.PRT_HOANCANHKINHTE;

                    if (Guid.TryParse(id2, out guid))
                    {
                        GIAODAN giaodan = new GIAODAN();
                        giaodan.MAGIAODAN = guid;
                        giaodan.SelectbyId();
                        if (giaodan.IsPersistence)
                        {
                            hogiadinhGiaodanModel.MAGIAODAN = giaodan.MAGIAODAN;
                            ViewData["GIAODAN"] = giaodan;
                            return View(hogiadinhGiaodanModel);
                        }
                    }
                }
            }
            return RedirectToAction("EditHoGiaDinh", new { id = id1 });
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddNhanKhau(HOGIADINH_GIAODANModel hogiadinh_giaodanModel)
        {
            if (ModelState.IsValid)
            {
                HOGIADINH_GIAODAN hogiadinh_giaodan = hogiadinh_giaodanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (HOGIADINH_GIAODANService.Check_Insert_HOGIADINH_GIAODAN(hogiadinh_giaodan))
                {
                    Exception exception;
                    hogiadinh_giaodan.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hogiadinh_giaodanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;
                        return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh_giaodanModel.MAHOGIADINH });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Giáo dân cần nhập hộ hiện đã thuộc hộ gia đình";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }

            HOGIADINH hogiadinh = new HOGIADINH();
            if (hogiadinh_giaodanModel != null) hogiadinh.MAHOGIADINH = hogiadinh_giaodanModel.MAHOGIADINH.Value;
            hogiadinh.SelectbyId();
            if (hogiadinh.IsPersistence)
            {
                ViewData["CHUHO"] = hogiadinh.PRT_GIAODAN;
                ViewData["HOANCANHKINHTE"] = hogiadinh.PRT_HOANCANHKINHTE;
                GIAODAN giaodan = new GIAODAN();
                if (hogiadinh_giaodanModel != null) giaodan.MAGIAODAN = hogiadinh_giaodanModel.MAGIAODAN.Value;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    ViewData["GIAODAN"] = giaodan;
                    return View(hogiadinh_giaodanModel);
                }
            }


            return RedirectToAction("HoGiaDinh");
        }

        public ActionResult DeleteNhanKhau(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (HOGIADINH_GIAODANService.Check_Delete_HOGIADINH_GIAODAN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var hogiadinhGiaodan = new HOGIADINH_GIAODAN();
                            hogiadinhGiaodan.MANHANKHAU = guid;
                            Exception exception;
                            hogiadinhGiaodan.SelectbyId();
                            if (hogiadinhGiaodan.IsPersistence)
                            {
                                // Check service here
                                hogiadinhGiaodan.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        public ActionResult EditNhanKhau(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HOGIADINH_GIAODAN hogiadinhGiaodan = new HOGIADINH_GIAODAN();
                hogiadinhGiaodan.MANHANKHAU = guid;
                hogiadinhGiaodan.SelectbyId();
                if (hogiadinhGiaodan.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
                    header.CurentCommon = "HoGiaDinh";
                    header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                    header.PageHeader = "Cập Nhật Nhân Khẩu - Mục Vụ";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0201";
                    ViewData[Header.Key] = header;

                    ViewData["CHUHO"] = hogiadinhGiaodan.PRT_HOGIADINH.PRT_GIAODAN;
                    ViewData["HOANCANHKINHTE"] = hogiadinhGiaodan.PRT_HOGIADINH.PRT_HOANCANHKINHTE;
                    ViewData["GIAODAN"] = hogiadinhGiaodan.PRT_GIAODAN;

                    return View(new HOGIADINH_GIAODANModel(hogiadinhGiaodan));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("HoGiaDinh");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditNhanKhau(HOGIADINH_GIAODANModel hogiadinhGiaoDanModel)
        {
            if (ModelState.IsValid)
            {
                HOGIADINH_GIAODAN hogiadinhGiaoDan = hogiadinhGiaoDanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (HOGIADINH_GIAODANService.Check_Update_HOGIADINH_GIAODAN(hogiadinhGiaoDan))
                {
                    Exception exception;
                    hogiadinhGiaoDan.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hogiadinhGiaoDanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;
                        return RedirectToAction("EditHoGiaDinh", new { id = hogiadinhGiaoDanModel.MAHOGIADINH });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hogiadinhGiaoDanModel);
        }

        public ActionResult NhapNhanKhau(string id)
        {
            Guid guid;
            EXCEPTION exception = new EXCEPTION();
            exception.UPDATETYPE = UpdateType.SELECT;
            bool isError = false;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    if (giaodan.REF_HOGIADINH.Count() == 0)
                    {
                        Header header = new Header();
                        header.Common = "ViewUserControl_NhapNhanKhau_Index";
                        header.CurentCommon = "HoGiaDinh";
                        header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                        header.PageHeader = "Tìm Kiếm Hộ Gia Đình - Mục Vụ";
                        header.Menulv1 = "02";
                        header.Menulv2 = "0201";
                        ViewData[Header.Key] = header;

                        ViewData["ID"] = id;
                        return View();
                    }
                    else
                    {
                        isError = true;
                        exception.RESULTTYPE = ResultType.ERROR;
                        exception.MESSAGE = "Giáo dân cần nhập khẩu đã thuộc hộ gia đình";
                    }
                }
            }
            if (!isError)
            {
                exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
                exception.RESULTTYPE = ResultType.ATTENTION;
            }
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("ChuyenChuHoGiaDinh3", new { id = id });
        }

        public ActionResult ChuyenChuHoGiaDinh3(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    EXCEPTION exception = new EXCEPTION();
                    exception.RESULTTYPE = ResultType.ATTENTION;
                    exception.UPDATETYPE = UpdateType.INSERT;
                    if (giaodan.REF_HOGIADINH.Count() > 0)
                    {
                        HOGIADINH hogiadinh = giaodan.REF_HOGIADINH.First();
                        if (hogiadinh.REF_HOGIADINH_GIAODAN.Count() > 1)
                        {
                            Header header = new Header();
                            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
                            header.CurentCommon = "HoGiaDinh";
                            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                            header.PageHeader = "Tìm Kiếm Hộ Gia Đình - Mục Vụ";
                            header.Menulv1 = "02";
                            header.Menulv2 = "0201";
                            ViewData[Header.Key] = header;

                            exception.MESSAGE =
                                                        "Giáo dân này hiện đang là chủ hộ<br/>Vui lòng chọn chủ hộ khác thay thế";
                            exception.Insert();
                            ViewData["Result"] = exception.EXCEPTIONID;
                            ViewData["MAHOGIADINH"] = hogiadinh.MAHOGIADINH;
                            ViewData["MACHUHO"] = id;
                            return View();
                        }
                        else
                        {
                            exception.MESSAGE =
                            "Giáo dân này hiện là chủ hộ<br />Và hộ gia đình hiện có một thành viên";
                            exception.Insert();
                            TempData["Result"] = exception.EXCEPTIONID;
                            return RedirectToAction("EditHoGiaDinh", new { id = hogiadinh.MAHOGIADINH });
                        }
                    }
                    else
                    {
                        exception.MESSAGE = "Giáo dân hiện chưa thuộc hộ gia đình";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("EditGiaoDan", new { id = id });
                    }
                }
            }
            return RedirectToAction("HoGiaDinh");
        }

        public ActionResult ChuyenChuHo3(string id1, string id2, string id3)
        {
            Guid guid = new Guid();
            HOGIADINH hogiadinh = new HOGIADINH();
            HOGIADINH_GIAODAN hogiadinhGiaodan = new HOGIADINH_GIAODAN();
            if (Guid.TryParse(id1, out guid))
            {
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
            }
            GIAODAN chuho = new GIAODAN();
            if (Guid.TryParse(id2, out guid))
            {
                chuho.MAGIAODAN = guid;
                chuho.SelectbyId();
            }
            if (Guid.TryParse(id3, out guid))
            {
                hogiadinhGiaodan.MANHANKHAU = guid;
                hogiadinhGiaodan.SelectbyId();
            }
            EXCEPTION exception = new EXCEPTION();
            if (hogiadinh.IsPersistence && chuho.IsPersistence && hogiadinhGiaodan.IsPersistence)
            {
                if (hogiadinh.PRT_GIAODAN.Equals(chuho) && hogiadinhGiaodan.PRT_HOGIADINH.Equals(hogiadinh))
                {
                    if (!hogiadinh.MACHUHO.Equals(hogiadinhGiaodan.MAGIAODAN))
                    {
                        hogiadinh.MACHUHO = hogiadinhGiaodan.MAGIAODAN;
                        hogiadinh.UpdatebyId();
                        exception.RESULTTYPE = ResultType.INFORMATION;
                        exception.MESSAGE = "Cập nhật thành công<br/>Chủ hộ đã được thay đổi";
                        exception.Insert();
                        TempData["Result"] = exception.EXCEPTIONID;
                        return RedirectToAction("NhapNhanKhau", new { id = id2 });
                    }
                }
            }
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.MESSAGE = "Có lỗi trong quá trình cập nhật<br />Chủ hộ mới được chọn trùng với chủ hộ cũ,";
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("ChuyenChuHoGiaDinh3", new { id = hogiadinhGiaodan.MAGIAODAN });

        }

        #endregion

        #region Cu Ngu

        public ActionResult ViewUserControl_DaCuNgu(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult Get_List_CuNgu(string id)
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<HOGIADINH_DIACHI> query = dataContext.GetTable<HOGIADINH_DIACHI>().Where(c => c.MAHOGIADINH + "" == id);

            //filtering
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(c => c.TUNAM).OrderBy(c => c.TUTHANG).OrderBy(c => c.DENNAM).OrderBy(c => c.DENTHANG);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new { c.MADIACHI, NAM = c.GetDateTimeSpan(), c.DIACHI, TENGIAOPHAN = Format_GIAOPHAN(c), TENGIAOHAT = Format_GIAOHAT(c), TENGIAOXU = Format_GIAOXU(c) })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        private string Format_GIAOXU(HOGIADINH_DIACHI hogiadinhDiachi)
        {
            if (hogiadinhDiachi.PRT_GIAOXU.IsPersistence)
                return hogiadinhDiachi.PRT_GIAOXU.TENGIAOXU;
            return "";
        }

        private string Format_GIAOHAT(HOGIADINH_DIACHI hogiadinhDiachi)
        {
            if (hogiadinhDiachi.PRT_GIAOHAT.IsPersistence)
                return hogiadinhDiachi.PRT_GIAOHAT.TENGIAOHAT;
            return ""; throw new NotImplementedException();
        }

        private string Format_GIAOPHAN(HOGIADINH_DIACHI hogiadinhDiachi)
        {
            if (hogiadinhDiachi.PRT_GIAOPHAN.IsPersistence)
                return hogiadinhDiachi.PRT_GIAOPHAN.TENGIAOPHAN;
            return "";
        }

        public ActionResult AddHoGiaDinh_CuNgu(string id)
        {
            HOGIADINH_DIACHIModel hogiadinhDiachiModel = new HOGIADINH_DIACHIModel();
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HOGIADINH hogiadinh = new HOGIADINH();
                hogiadinh.MAHOGIADINH = guid;
                hogiadinh.SelectbyId();
                if (hogiadinh.IsPersistence)
                {
                    hogiadinhDiachiModel.MAHOGIADINH = guid;
                    hogiadinhDiachiModel.MACHUHO = hogiadinh.MACHUHO + "";
                    hogiadinhDiachiModel.TENCHUHO = string.Format("{0} {1} {2}", hogiadinh.PRT_GIAODAN.TENTHANH, hogiadinh.PRT_GIAODAN.HOVATENDEM, hogiadinh.PRT_GIAODAN.TEN);
                    hogiadinhDiachiModel.HOGIADINHID = hogiadinh.HOGIADINHID.HasValue ? hogiadinh.HOGIADINHID.Value.ToString("00000") : "";
                    if (hogiadinh.PRT_GIAOHO.IsPersistence)
                        hogiadinhDiachiModel.HOGIADINHID = string.Format("{0}.{1}", hogiadinh.PRT_GIAOHO.MAHOID, hogiadinhDiachiModel.HOGIADINHID);
                }
                else
                {
                    return Redirect(Url.Action("EditHoGiaDinh", "GiaDinhCongGiao", new { area = "AdminCP", id = id }) + "#tabs-2");
                }
            }
            else
            {
                return Redirect(Url.Action("EditHoGiaDinh", "GiaDinhCongGiao", new { area = "AdminCP", id = id }) + "#tabs-2");
            }
            Header header = new Header();
            header.Common = "ViewUserControl_CuNgu_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Hộ Gia Đình - Gia Đình Công Giáo";
            header.PageHeader = "Thêm Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["MAHOGIADINH"] = id;
            return View(hogiadinhDiachiModel);
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddHoGiaDinh_CuNgu(HOGIADINH_DIACHIModel hogiadinhDiaChiModel, bool @default)
        {
            if (ModelState.IsValid)
            {
                HOGIADINH_DIACHI hogiadinhDiaChi = hogiadinhDiaChiModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (HOGIADINH_DIACHIService.Check_Insert_HOGIADINH_DIACHI(hogiadinhDiaChi))
                {
                    Exception exception;
                    hogiadinhDiaChi.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hogiadinhDiaChiModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;

                        if (@default)
                        {
                            HOGIADINH hogiadinh = hogiadinhDiaChi.PRT_HOGIADINH;
                            if (hogiadinh.IsPersistence)
                            {
                                hogiadinh.DIACHI = hogiadinhDiaChi.DIACHI;
                                hogiadinh.MAQUOCGIA = hogiadinhDiaChi.MAQUOCGIA;
                                hogiadinh.MATINHTHANH = hogiadinhDiaChi.MATINHTHANH;
                                hogiadinh.MAQUANHUYEN = hogiadinhDiaChi.MAQUANHUYEN;
                                hogiadinh.MAXAPHUONG = hogiadinhDiaChi.MAXAPHUONG;
                                hogiadinh.MAGIAOPHAN = hogiadinhDiaChi.MAGIAOPHAN;
                                hogiadinh.MAGIAOHAT = hogiadinhDiaChi.MAGIAOHAT;
                                hogiadinh.MAGIAOXU = hogiadinhDiaChi.MAGIAOXU;
                                hogiadinh.UpdatebyId();
                            }
                        }

                        return Redirect(Url.Action("EditHoGiaDinh", "GiaDinhCongGiao", new { area = "AdminCP", id = hogiadinhDiaChiModel.MAHOGIADINH }) + "#tabs-2");
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            Header header = new Header();
            header.Common = "ViewUserControl_CuNgu_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Hộ Gia Đình - Gia Đình Công Giáo";
            header.PageHeader = "Thêm Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["MAHOGIADINH"] = hogiadinhDiaChiModel.MAHOGIADINH;
            return View(hogiadinhDiaChiModel);
        }

        public ActionResult EditHoGiaDinh_CuNgu(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HOGIADINH_DIACHI hogiadinhDiachi = new HOGIADINH_DIACHI();
                hogiadinhDiachi.MADIACHI = guid;
                hogiadinhDiachi.SelectbyId();
                if (hogiadinhDiachi.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_CuNgu_Index";
                    header.CurentCommon = "HoGiaDinh";
                    header.PageTitle = "Hộ Gia Đình - Gia Đình Công Giáo";
                    header.PageHeader = "Cập Nhật Nơi Cư Ngụ - Gia Đình Công Giáo";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0201";
                    ViewData[Header.Key] = header;

                    HOGIADINH hogiadinh = new HOGIADINH();
                    hogiadinh.MAHOGIADINH = hogiadinhDiachi.MAHOGIADINH.Value;
                    hogiadinh.SelectbyId();
                    HOGIADINH_DIACHIModel hogiadinhDiachiModel = new HOGIADINH_DIACHIModel(hogiadinhDiachi);
                    if (hogiadinh.IsPersistence)
                    {
                        hogiadinhDiachiModel.MACHUHO = hogiadinh.MACHUHO + "";
                        hogiadinhDiachiModel.TENCHUHO = string.Format("{0} {1} {2}", hogiadinh.PRT_GIAODAN.TENTHANH,
                                                                      hogiadinh.PRT_GIAODAN.HOVATENDEM,
                                                                      hogiadinh.PRT_GIAODAN.TEN);
                        hogiadinhDiachiModel.HOGIADINHID = hogiadinh.HOGIADINHID.HasValue
                                                               ? hogiadinh.HOGIADINHID.Value.ToString("00000")
                                                               : "";
                        if (hogiadinh.PRT_GIAOHO.IsPersistence)
                            hogiadinhDiachiModel.HOGIADINHID = string.Format("{0}.{1}", hogiadinh.PRT_GIAOHO.MAHOID,
                                                                             hogiadinhDiachiModel.HOGIADINHID);
                        ViewData["MAHOGIADINH"] = hogiadinh.MAHOGIADINH;
                        return View(hogiadinhDiachiModel);
                    }
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("HoGiaDinh");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditHoGiaDinh_CuNgu(HOGIADINH_DIACHIModel hogiadinhDiachiModel, bool @default)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_CuNgu_Index";
            header.CurentCommon = "HoGiaDinh";
            header.PageTitle = "Hộ Gia Đình - Gia Đình Công Giáo";
            header.PageHeader = "Cập Nhật Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["MAHOGIADINH"] = hogiadinhDiachiModel.MAHOGIADINH;
            if (ModelState.IsValid)
            {
                HOGIADINH_DIACHI hogiadinhDiaChi = hogiadinhDiachiModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (HOGIADINH_DIACHIService.Check_Update_HOGIADINH_DIACHI(hogiadinhDiaChi))
                {
                    Exception exception;
                    hogiadinhDiaChi.UpdatebyId(out exception);
                    if (exception == null)
                    {

                        if (@default)
                        {
                            HOGIADINH hogiadinh = hogiadinhDiaChi.PRT_HOGIADINH;
                            if (hogiadinh.IsPersistence)
                            {
                                hogiadinh.DIACHI = hogiadinhDiaChi.DIACHI;
                                hogiadinh.MAQUOCGIA = hogiadinhDiaChi.MAQUOCGIA;
                                hogiadinh.MATINHTHANH = hogiadinhDiaChi.MATINHTHANH;
                                hogiadinh.MAQUANHUYEN = hogiadinhDiaChi.MAQUANHUYEN;
                                hogiadinh.MAXAPHUONG = hogiadinhDiaChi.MAXAPHUONG;
                                hogiadinh.MAGIAOPHAN = hogiadinhDiaChi.MAGIAOPHAN;
                                hogiadinh.MAGIAOHAT = hogiadinhDiaChi.MAGIAOHAT;
                                hogiadinh.MAGIAOXU = hogiadinhDiaChi.MAGIAOXU;
                                hogiadinh.UpdatebyId();
                            }
                        }

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hogiadinhDiachiModel);
        }

        public ActionResult DeleteHoGiaDinh_CuNgu(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (HOGIADINH_DIACHIService.Check_Delete_HOGIADINH_DIACHI(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var hogiadinhDiachi = new HOGIADINH_DIACHI();
                            hogiadinhDiachi.MADIACHI = guid;
                            Exception exception;
                            hogiadinhDiachi.SelectbyId();
                            if (hogiadinhDiachi.IsPersistence)
                            {
                                // Check service here
                                HOGIADINH_DIACHIService.Delete(hogiadinhDiachi);

                                hogiadinhDiachi.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #endregion

        #region Hoan Canh Kinh Te

        public ActionResult HoanCanhKinhTe()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_HoanCanhKinhTe_Index";
            header.CurentCommon = "HoanCanhKinhTe";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Danh mục Hoàn Cảnh Kinh Tế - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0203";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_HoanCanhKinhTe()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<HOANCANHKINHTE> query = dataContext.GetTable<HOANCANHKINHTE>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<HOANCANHKINHTE>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<HOANCANHKINHTE>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<HOANCANHKINHTE>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<HOANCANHKINHTE>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<HOANCANHKINHTE>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new HOANCANHKINHTEModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddHoanCanhKinhTe()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoanCanhKinhTe";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Hoàn Cảnh Kinh Tế - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0203";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddHoanCanhKinhTe(HOANCANHKINHTEModel hoancanhkinhteModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoanCanhKinhTe";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Hoàn Cảnh Kinh Tế - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0203";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                HOANCANHKINHTE hoancanhkinhte = hoancanhkinhteModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (HOANCANHKINHTEService.Check_Insert_HOANCANHKINHTE(hoancanhkinhte))
                {
                    Exception exception;
                    hoancanhkinhte.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hoancanhkinhteModel.NAME = "";
                        ModelState["TENHOANCANHKINHTE"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        hoancanhkinhteModel.TENHOANCANHKINHTE = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hoancanhkinhteModel);
        }

        public ActionResult EditHoanCanhKinhTe(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoanCanhKinhTe";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Hoàn Cảnh Kinh Tế - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0203";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                HOANCANHKINHTE hoancanhkinhte = new HOANCANHKINHTE();
                hoancanhkinhte.MAHOANCANHKINHTE = guid;
                hoancanhkinhte.SelectbyId();
                if (hoancanhkinhte.IsPersistence)
                {
                    return View(new HOANCANHKINHTEModel(hoancanhkinhte));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("HoanCanhKinhTe");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditHoanCanhKinhTe(HOANCANHKINHTEModel hoancanhkinhteModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "HoanCanhKinhTe";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Hoàn Cảnh Kinh Tế - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0203";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                HOANCANHKINHTE hoancanhkinhte = hoancanhkinhteModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (HOANCANHKINHTEService.Check_Update_HOANCANHKINHTE(hoancanhkinhte))
                {
                    Exception exception;
                    hoancanhkinhte.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //hoancanhkinhteModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(hoancanhkinhteModel);
        }

        public ActionResult DeleteHoanCanhKinhTe(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (HOANCANHKINHTEService.Check_Delete_HOANCANHKINHTE(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var hoancanhkinhte = new HOANCANHKINHTE();
                            hoancanhkinhte.MAHOANCANHKINHTE = guid;
                            Exception exception;
                            hoancanhkinhte.SelectbyId();
                            if (hoancanhkinhte.IsPersistence)
                            {
                                // Check service here
                                hoancanhkinhte.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Giao Dan

        public ActionResult GiaoDan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Danh mục Giáo Dân - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_GiaoDan()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<dynamic> query;

            var query1 = dataContext.GetTable<GIAODAN>().Where(grid).GroupJoin(dataContext.GetTable<SOTATHE>(),
                                                                               c => c.MAGIAODAN,
                                                                               v => v.MAGIAODAN,
                                                                               (c, v) => new { c, COUNT = v.Count() })
                .Select(c => new
                                 {
                                     c.c.MAGIAODAN,
                                     c.c.TENTHANH,
                                     c.c.HOVATENDEM,
                                     c.c.TEN,
                                     c.c.DANTOC,
                                     c.c.GIOITINH,
                                     c.c.GIAODANID,
                                     EDIT = Format_GIAODAN_Edit(c.c),
                                     NAMSINH = c.c.GetBirthDay(),
                                     TATHE = Format_GIAODAN_TATHE(c.c, c.COUNT),
                                     c.c.MAGIAOHO,
                                     c.c.TENCHA,
                                     c.c.TENME
                                 })
                .GroupJoin(dataContext.GetTable<SOTANHIEN>().Where(c => c.HOITUC != true), c => c.MAGIAODAN, v => v.MAGIAODAN,
                (c, v) => new { c, Count = v.Count() })
                .Select(c => new
                               {
                                   c.c.MAGIAODAN,
                                   c.c.TENTHANH,
                                   c.c.HOVATENDEM,
                                   c.c.TEN,
                                   c.c.DANTOC,
                                   c.c.GIOITINH,
                                   c.c.GIAODANID,
                                   c.c.EDIT,
                                   c.c.NAMSINH,
                                   c.c.TATHE,
                                   c.c.MAGIAOHO,
                                   c.c.TENCHA,
                                   c.c.TENME,
                                   TANHIEN = Format_GIAODAN_TANHIEN(c.c.MAGIAODAN, c.Count)
                               }
                )
                .GroupJoin(
                    dataContext.GetTable<HOGIADINH_GIAODAN>().Where(
                        c => c.DACHUYENDI.HasValue == false || c.DACHUYENDI.Value == false),
                    c => c.MAGIAODAN, v => v.MAGIAODAN, (c, v) => new { c, v })
                .SelectMany(t => t.v.DefaultIfEmpty(), (t, v) => new
                                                                     {
                                                                         t.c.MAGIAODAN,
                                                                         t.c.TENTHANH,
                                                                         t.c.HOVATENDEM,
                                                                         t.c.TEN,
                                                                         t.c.DANTOC,
                                                                         t.c.GIOITINH,
                                                                         t.c.GIAODANID,
                                                                         t.c.EDIT,
                                                                         t.c.NAMSINH,
                                                                         t.c.TATHE,
                                                                         t.c.MAGIAOHO,
                                                                         t.c.TENCHA,
                                                                         t.c.TENME,
                                                                         t.c.TANHIEN,
                                                                         EDITHOGIADINH =
                                                                     Format_HOGIADINH_GIAODAN_Edit(t.c.MAGIAODAN, v.MAHOGIADINH)
                                                                     });

            if (typeof(GIAOHO).CheckPropertyInfo(grid))
                query = query1.Join(dataContext.GetTable<GIAOHO>().Where(grid), c => c.MAGIAOHO,
                                                             v => v.MAGIAOHO,
                                                             (c, v) => new
                                                                           {
                                                                               c.MAGIAODAN,
                                                                               c.TENTHANH,
                                                                               c.HOVATENDEM,
                                                                               c.TEN,
                                                                               c.DANTOC,
                                                                               c.GIOITINH,
                                                                               c.GIAODANID,
                                                                               v.TENGIAOHO,
                                                                               c.EDIT,
                                                                               c.NAMSINH,
                                                                               c.TATHE,
                                                                               c.EDITHOGIADINH,
                                                                               c.TENCHA,
                                                                               c.TANHIEN,
                                                                               c.TENME
                                                                           });
            else
                query = query1.GroupJoin(dataContext.GetTable<GIAOHO>(),
                                                                              c => c.MAGIAOHO,
                                                                              v => v.MAGIAOHO,
                                                                              (c, v) => new { c, v }).SelectMany(
                                                                                  t => t.v.DefaultIfEmpty(),
                                                                                  (t, v) => new
                                                                                                {
                                                                                                    t.c.MAGIAODAN,
                                                                                                    t.c.TENTHANH,
                                                                                                    t.c.HOVATENDEM,
                                                                                                    t.c.TEN,
                                                                                                    t.c.DANTOC,
                                                                                                    t.c.GIOITINH,
                                                                                                    t.c.GIAODANID,
                                                                                                    v.TENGIAOHO,
                                                                                                    t.c.EDIT,
                                                                                                    t.c.NAMSINH,
                                                                                                    t.c.TATHE,
                                                                                                    t.c.EDITHOGIADINH,
                                                                                                    t.c.TENCHA,
                                                                                                    t.c.TANHIEN,
                                                                                                    t.c.TENME
                                                                                                });

            //filter
            //query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        private string Format_GIAODAN_TANHIEN(Guid guid, int count)
        {
            if (count > 0)
                return string.Format("<img src=\"{0}LinhMuc.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}#tabs-4'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditGiaoDan", new { id = guid }));
            return "";
        }

        private string Format_GIAODAN_TATHE(GIAODAN giaodan, int count)
        {
            if (count > 0)
                return string.Format("<img src=\"{0}TaThe.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}#tabs-5'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditGiaoDan", new { id = giaodan.MAGIAODAN }));
            return "";
        }

        private string Format_GIAODAN_TATHE(GIAODAN giaodan)
        {
            if (giaodan.REF_SOTATHE.Count() > 0)
                return string.Format("<img src=\"{0}TaThe.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}#tabs-5'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("EditGiaoDan", new { id = giaodan.MAGIAODAN }));
            return "";
        }

        private string Format_GIAODAN_Edit(GIAODAN giaodan)
        {
            string result = string.Format("<img src=\"{0}icons/pencil.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP"), Url.Action("EditGiaoDan", new { id = giaodan.MAGIAODAN }));
            return result;
        }

        private string Format_HOGIADINH_GIAODAN_Edit(Guid MAGIAODAN, Guid? MAHOGIADINH)
        {
            if (MAHOGIADINH.HasValue)
                return string.Format("<img src=\"{0}HoGiaDinh.png\" height=\"16\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />"
                    , Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao")
                    , Url.Action("EditHoGiaDinh"
                    , new { id = MAHOGIADINH }));

            return string.Format("<img src=\"{0}Add_HoGiaDinh.png\" height=\"16\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP", "GiaDinhCongGiao"), Url.Action("AddHoGiaDinh", new { id = MAGIAODAN }));
        }

        private string Format_GioiTinh(GIAODAN giaodan)
        {
            return giaodan.GIOITINH.HasValue ? giaodan.GIOITINH.Value ? "Nữ" : "Nam" : "";
        }

        public ActionResult AddGiaoDan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan1_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Giáo Dân - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;
            GIAODANModel giaodanModel = new GIAODANModel();
            giaodanModel.GIOITINH = false;
            return View(giaodanModel);
        }

        public ActionResult DanhSachTenThanh(string q)
        {
            DataItem dataItem = new DataItem();
            dataItem["q"] = q;
            var obj = InfoTech.Core.Data.Receiver.UnTypeObject.SelectMany(dataItem, "[sp_dbo.GiaoDan_Select_TenThanh]");

            return Json(obj.Select(c => new { TENTHANH = c["TENTHANH"] }), JsonRequestBehavior.AllowGet);
        }

        public ActionResult DanhSachDanToc(string q)
        {
            DataItem dataItem = new DataItem();
            dataItem["q"] = q;
            var obj = InfoTech.Core.Data.Receiver.UnTypeObject.SelectMany(dataItem, "[sp_dbo.GiaoDan_Select_DanToc]");

            return Json(obj.Select(c => new { DANTOC = c["DANTOC"] }), JsonRequestBehavior.AllowGet);
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddGiaoDan(GIAODANModel giaodanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan1_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Giáo Dân - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAODAN giaodan = giaodanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (!GIAODANService.CheckBirthday(giaodanModel.NGAYSINH, giaodanModel.THANGSINH, giaodanModel.NAMSINH))
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Ngày tháng không hợp lệ";
                }
                else if (GIAODANService.Check_Insert_GIAODAN(giaodan))
                {
                    Exception exception;
                    giaodan.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaodanModel.NAME = "";
                        //ModelState["TEN"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.TEN = "";
                        //giaodanModel.HOVATENDEM = "";
                        //ModelState["HOVATENDEM"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.TENTHANH = "";
                        //ModelState["TENTHANH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.DANTOC = "";
                        //ModelState["DANTOC"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.DIACHI = "";
                        //ModelState["DIACHI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.DIENTHOAI = "";
                        //ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.PARENTID = null;
                        //ModelState["PARENTID"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        //giaodanModel.MOTHERID = null;
                        //ModelState["MOTHERID"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;
                        return RedirectToAction("EditGiaoDan", new { id = giaodan.MAGIAODAN });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaodanModel);
        }

        public ActionResult EditGiaoDan(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_GiaoDanHoGiaDinh_Index";
                    header.CurentCommon = "GiaoDan";
                    header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
                    header.PageHeader = "Cập nhật Giáo Dân - Mục Vụ";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0202";
                    ViewData[Header.Key] = header;
                    GIAODANModel giaodanModel = new GIAODANModel(giaodan);
                    ViewData["GiaoDan"] = giaodanModel;
                    giaodanModel.MAGIAODANID = giaodan.GetMaGiaoDan();
                    //if (giaodan.PRT_GIAODAN_CHA.IsPersistence)
                    //    giaodanModel.TENCHA = giaodan.PRT_GIAODAN_CHA.GetFullName();
                    //if (giaodan.PRT_GIAODAN_ME.IsPersistence)
                    //    giaodanModel.TENME = giaodan.PRT_GIAODAN_ME.GetFullName();
                    return View(giaodanModel);
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoDan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditGiaoDan(GIAODANModel giaodanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDanHoGiaDinh_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Dân - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;
            ViewData["GiaoDan"] = giaodanModel;

            if (ModelState.IsValid)
            {
                GIAODAN giaodan = giaodanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (!GIAODANService.CheckBirthday(giaodanModel.NGAYSINH, giaodanModel.THANGSINH, giaodanModel.NAMSINH))
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Ngày tháng không hợp lệ";
                }
                else if (giaodanModel.PARENTID == giaodanModel.MAGIAODAN && giaodanModel.MAGIAODAN.HasValue)
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Có lỗi trong quá trình cập nhật, vui lòng kiểm tra lại.";
                    ModelState.AddModelError("TENCHA", "Giáo dân chọ làm cha không được giống giáo dân đang chỉnh sửa.");
                }
                else if (giaodanModel.MOTHERID == giaodanModel.MAGIAODAN && giaodanModel.MAGIAODAN.HasValue)
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Có lỗi trong quá trình cập nhật, vui lòng kiểm tra lại.";
                    ModelState.AddModelError("TENME", "Giáo dân chọ làm Mẹ không được giống giáo dân đang chỉnh sửa.");
                }
                else if (GIAODANService.Check_Update_GIAODAN(giaodan))
                {
                    Exception exception;
                    giaodan.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaodanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        giaodanModel.MAGIAODANID = giaodan.GetMaGiaoDan();
                        giaodanModel.GIAODANID = giaodan.GIAODANID;
                        ModelState["GIAODANID"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaodanModel);
        }

        public ActionResult DeleteGiaoDan(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAODANService.Check_Delete_GIAODAN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaodan = new GIAODAN();
                            giaodan.MAGIAODAN = guid;
                            Exception exception;
                            giaodan.SelectbyId();
                            if (giaodan.IsPersistence)
                            {
                                // Check service here
                                GIAODANService.Delete(giaodan);
                                giaodan.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        public ActionResult TimPhuThan(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult TimPhuThan1(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult Get_List_GiaoDan_GioiTinh(string id)
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<GIAODAN> query1;
            if (string.IsNullOrEmpty(id))
                query1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH != true);
            else
                query1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH == true);
            IQueryable<dynamic> query;

            if (typeof(GIAOHO).CheckPropertyInfo(grid))
                query = query1.Where(grid).Join(dataContext.GetTable<GIAOHO>().Where(grid), c => c.MAGIAOHO,
                                                             v => v.MAGIAOHO,
                                                             (c, v) => new
                                                             {
                                                                 c.MAGIAODAN,
                                                                 c.TENTHANH,
                                                                 c.HOVATENDEM,
                                                                 c.TEN,
                                                                 c.DANTOC,
                                                                 c.GIAODANID,
                                                                 v.TENGIAOHO,
                                                                 NAMSINH = c.GetBirthDay(),
                                                                 TATHE = Format_GIAODAN_TATHE(c),
                                                                 c.TENCHA,
                                                                 c.TENME
                                                             });
            else
                query = query1.Where(grid).GroupJoin(dataContext.GetTable<GIAOHO>(),
                                                                              c => c.MAGIAOHO,
                                                                              v => v.MAGIAOHO,
                                                                              (c, v) => new { c, v }).SelectMany(
                                                                                  t => t.v.DefaultIfEmpty(),
                                                                                  (t, v) => new
                                                                                  {
                                                                                      t.c.MAGIAODAN,
                                                                                      t.c.TENTHANH,
                                                                                      t.c.HOVATENDEM,
                                                                                      t.c.TEN,
                                                                                      t.c.DANTOC,
                                                                                      t.c.GIAODANID,
                                                                                      v.TENGIAOHO,
                                                                                      NAMSINH = t.c.GetBirthDay(),
                                                                                      TATHE = Format_GIAODAN_TATHE(t.c),
                                                                                      t.c.TENCHA,
                                                                                      t.c.TENME
                                                                                  });

            //filtering
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        #region Bao Cao

        public ActionResult ViewUserControl_GiaoDan_BaoCao(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        #endregion

        #region Cu Ngu

        public ActionResult ViewUserControl_GiaoDan_DaCuNgu(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult Get_List_GiaoDan_CuNgu(string id)
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            var query = dataContext.GetTable<GIAODAN_DIACHI>().Where(c => c.MAGIAODAN + "" == id)
                .GroupJoin(dataContext.GetTable<GIAOPHAN>(),
                           c => c.MAGIAOPHAN,
                           v => v.MAGIAOPHAN,
                           (c, v) => new { c, v }).SelectMany(t => t.v.DefaultIfEmpty(),
                                                            (t, v) =>
                                                            new
                                                                {
                                                                    t.c.MADIACHI,
                                                                    NAM = t.c.GetDateTimeSpan(),
                                                                    t.c.DIACHI,
                                                                    t.c.MAGIAOHAT,
                                                                    t.c.MAGIAOXU,
                                                                    v.TENGIAOPHAN,
                                                                    t.c.TUNAM,
                                                                    t.c.TUTHANG,
                                                                    t.c.DENNAM,
                                                                    t.c.DENTHANG
                                                                })
                .GroupJoin(dataContext.GetTable<GIAOHAT>(),
                           c => c.MAGIAOHAT,
                           v => v.MAGIAOHAT,
                           (c, v) => new { c, v }).SelectMany(t => t.v.DefaultIfEmpty(),
                                                            (t, v) =>
                                                            new
                                                                {
                                                                    t.c.MADIACHI,
                                                                    t.c.NAM,
                                                                    t.c.DIACHI,
                                                                    t.c.TENGIAOPHAN,
                                                                    t.c.MAGIAOXU,
                                                                    v.TENGIAOHAT,
                                                                    t.c.TUNAM,
                                                                    t.c.TUTHANG,
                                                                    t.c.DENNAM,
                                                                    t.c.DENTHANG
                                                                })
                .GroupJoin(dataContext.GetTable<GIAOXU>(),
                           c => c.MAGIAOXU,
                           v => v.MAGIAOXU,
                           (c, v) => new { c, v }).SelectMany(t => t.v.DefaultIfEmpty(),
                                                            (t, v) =>
                                                            new
                                                                {
                                                                    t.c.MADIACHI,
                                                                    t.c.NAM,
                                                                    t.c.DIACHI,
                                                                    t.c.TENGIAOPHAN,
                                                                    t.c.TENGIAOHAT,
                                                                    v.TENGIAOXU,
                                                                    t.c.TUNAM,
                                                                    t.c.TUTHANG,
                                                                    t.c.DENNAM,
                                                                    t.c.DENTHANG
                                                                });

            //filtering
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(c => c.TUNAM).OrderBy(c => c.TUTHANG).OrderBy(c => c.DENNAM).OrderBy(c => c.DENTHANG);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddGiaoDan_CuNgu(string id)
        {
            GIAODAN_DIACHIModel giaodanDiachi = new GIAODAN_DIACHIModel();
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    giaodanDiachi.TENGIAODAN = giaodan.GetFullName();
                    giaodanDiachi.MAGIAODAN = giaodan.MAGIAODAN;
                }
                else
                {
                    return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = id }) + "#tabs-1");
                }
            }
            else
            {
                return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = id }) + "#tabs-1");
            }
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan_CuNgu_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Cập Nhật Địa Chỉ Cư trú - Gia Đình Công Giáo";
            header.PageHeader = "Thêm Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["ID"] = giaodanDiachi.MAGIAODAN;
            return View(giaodanDiachi);
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddGiaoDan_CuNgu(GIAODAN_DIACHIModel giaodanDiaChiModel, bool @default)
        {
            if (ModelState.IsValid)
            {
                GIAODAN_DIACHI giaodanDiaChi = giaodanDiaChiModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (GIAODAN_DIACHIService.Check_Insert_GIAODAN_DIACHI(giaodanDiaChi))
                {
                    Exception exception;
                    giaodanDiaChi.Insert(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;

                        if (@default)
                        {
                            GIAODAN giaodan = giaodanDiaChi.PRT_GIAODAN;
                            if (giaodan.IsPersistence)
                            {
                                giaodan.DIACHI = giaodanDiaChi.DIACHI;
                                giaodan.MAQUOCGIA = giaodanDiaChi.MAQUOCGIA;
                                giaodan.MATINHTHANH = giaodanDiaChi.MATINHTHANH;
                                giaodan.MAQUANHUYEN = giaodanDiaChi.MAQUANHUYEN;
                                giaodan.MAXAPHUONG = giaodanDiaChi.MAXAPHUONG;
                                giaodan.MAGIAOPHAN = giaodanDiaChi.MAGIAOPHAN;
                                giaodan.MAGIAOHAT = giaodanDiaChi.MAGIAOHAT;
                                giaodan.MAGIAOXU = giaodanDiaChi.MAGIAOXU;
                                giaodan.UpdatebyId();
                            }
                        }

                        return RedirectToAction("EditGiaoDan", new { id = giaodanDiaChiModel.MAGIAODAN });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan_CuNgu_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Cập Nhật Địa Chỉ Cư trú - Gia Đình Công Giáo";
            header.PageHeader = "Thêm Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["ID"] = giaodanDiaChiModel.MAGIAODAN;
            return View(giaodanDiaChiModel);
        }

        public ActionResult EditGiaoDan_CuNgu(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN_DIACHI giaodanDiachi = new GIAODAN_DIACHI();
                giaodanDiachi.MADIACHI = guid;
                giaodanDiachi.SelectbyId();
                if (giaodanDiachi.IsPersistence)
                {
                    GIAODAN_DIACHIModel giaodanDiachiModel = new GIAODAN_DIACHIModel(giaodanDiachi);
                    giaodanDiachiModel.TENGIAODAN = giaodanDiachi.PRT_GIAODAN.GetFullName();
                    Header header = new Header();
                    header.Common = "ViewUserControl_GiaoDan_CuNgu_Index";
                    header.CurentCommon = "GiaoDan";
                    header.PageTitle = "Cập Nhật Địa Chỉ Cư trú - Gia Đình Công Giáo";
                    header.PageHeader = "Cập Nhật Nơi Cư Ngụ - Gia Đình Công Giáo";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0201";
                    ViewData[Header.Key] = header;
                    ViewData["ID"] = giaodanDiachi.MAGIAODAN;
                    return View(giaodanDiachiModel);
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoDan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditGiaoDan_CuNgu(GIAODAN_DIACHIModel giaodanDiaChiModel, bool @default)
        {
            if (ModelState.IsValid)
            {
                GIAODAN_DIACHI giaodanDiaChi = giaodanDiaChiModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (GIAODAN_DIACHIService.Check_Update_GIAODAN_DIACHI(giaodanDiaChi))
                {
                    Exception exception;
                    giaodanDiaChi.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;

                        if (@default)
                        {
                            GIAODAN giaodan = giaodanDiaChi.PRT_GIAODAN;
                            if (giaodan.IsPersistence)
                            {
                                giaodan.DIACHI = giaodanDiaChi.DIACHI;
                                giaodan.MAQUOCGIA = giaodanDiaChi.MAQUOCGIA;
                                giaodan.MATINHTHANH = giaodanDiaChi.MATINHTHANH;
                                giaodan.MAQUANHUYEN = giaodanDiaChi.MAQUANHUYEN;
                                giaodan.MAXAPHUONG = giaodanDiaChi.MAXAPHUONG;
                                giaodan.MAGIAOPHAN = giaodanDiaChi.MAGIAOPHAN;
                                giaodan.MAGIAOHAT = giaodanDiaChi.MAGIAOHAT;
                                giaodan.MAGIAOXU = giaodanDiaChi.MAGIAOXU;
                                giaodan.UpdatebyId();
                            }
                        }

                        return RedirectToAction("EditGiaoDan", new { id = giaodanDiaChiModel.MAGIAODAN });
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoDan_CuNgu_Index";
            header.CurentCommon = "GiaoDan";
            header.PageTitle = "Cập Nhật Địa Chỉ Cư trú - Gia Đình Công Giáo";
            header.PageHeader = "Cập Nhật Nơi Cư Ngụ - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0201";
            ViewData[Header.Key] = header;
            ViewData["ID"] = giaodanDiaChiModel.MAGIAODAN;
            return View(giaodanDiaChiModel);
        }

        public ActionResult DeleteGiaoDan_CuNgu(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAODAN_DIACHIService.Check_Delete_GIAODAN_DIACHI(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaodanDiachi = new GIAODAN_DIACHI();
                            giaodanDiachi.MADIACHI = guid;
                            Exception exception;
                            giaodanDiachi.SelectbyId();
                            if (giaodanDiachi.IsPersistence)
                            {
                                // Check service here
                                GIAODAN_DIACHIService.Delete(giaodanDiachi);

                                giaodanDiachi.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #endregion

        #region Quan Hệ Gia Tộc

        public ActionResult QuanHeGiaToc()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_QuanHeGiaToc_Index";
            header.CurentCommon = "QuanHeGiaToc";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Danh mục Quan Hệ Gia Tộc - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0204";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_QuanHeGiaToc()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<QUANHEGIATOC> query = dataContext.GetTable<QUANHEGIATOC>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<QUANHEGIATOC>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<QUANHEGIATOC>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<QUANHEGIATOC>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<QUANHEGIATOC>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<QUANHEGIATOC>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new QUANHEGIATOCModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddQuanHeGiaToc()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "QuanHeGiaToc";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Quan Hệ Gia Tộc - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0204";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddQuanHeGiaToc(QUANHEGIATOCModel quanhegiatocModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "QuanHeGiaToc";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Thêm Quan Hệ Gia Tộc - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0204";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUANHEGIATOC quanhegiatoc = quanhegiatocModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (QUANHEGIATOCService.Check_Insert_QUANHEGIATOC(quanhegiatoc))
                {
                    Exception exception;
                    quanhegiatoc.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //quanhegiatocModel.NAME = "";

                        quanhegiatocModel.TENQUANHEGIATOC = "";
                        ModelState["TENQUANHEGIATOC"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quanhegiatocModel);
        }

        public ActionResult EditQuanHeGiaToc(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "QuanHeGiaToc";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Quan Hệ Gia Tộc - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0204";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                QUANHEGIATOC quanhegiatoc = new QUANHEGIATOC();
                quanhegiatoc.MAQUANHEGIATOC = guid;
                quanhegiatoc.SelectbyId();
                if (quanhegiatoc.IsPersistence)
                {
                    return View(new QUANHEGIATOCModel(quanhegiatoc));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("QuanHeGiaToc");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditQuanHeGiaToc(QUANHEGIATOCModel quanhegiatocModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "QuanHeGiaToc";
            header.PageTitle = "Gia Đình Công Giáo - Mục Vụ";
            header.PageHeader = "Cập nhật Quan Hệ Gia Tộc - Mục Vụ";
            header.Menulv1 = "02";
            header.Menulv2 = "0204";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUANHEGIATOC quanhegiatoc = quanhegiatocModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (QUANHEGIATOCService.Check_Update_QUANHEGIATOC(quanhegiatoc))
                {
                    Exception exception;
                    quanhegiatoc.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //quanhegiatocModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quanhegiatocModel);
        }

        public ActionResult DeleteQuanHeGiaToc(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (QUANHEGIATOCService.Check_Delete_QUANHEGIATOC(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var quanhegiatoc = new QUANHEGIATOC();
                            quanhegiatoc.MAQUANHEGIATOC = guid;
                            Exception exception;
                            quanhegiatoc.SelectbyId();
                            if (quanhegiatoc.IsPersistence)
                            {
                                // Check service here
                                quanhegiatoc.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Bi Tich

        public ActionResult ViewUserControl_RuaToi_XungToi_ThemSuc(string id)
        {
            GIAODAN giaodan = new GIAODAN();
            Guid guid;
            if (Guid.TryParse(id, out guid))
                giaodan.MAGIAODAN = guid;
            giaodan.SelectbyId();
            if (giaodan.IsPersistence)
                ViewData["GENDERID"] = giaodan.GIOITINH == true ? "1" : "";
            else
                return Content("");
            return View(new GIAODANModel(giaodan));
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult UpdateSoBiTich(SOBITICHModel sobitichModel)
        {
            if (ModelState.IsValid)
            {
                SOBITICH sobitich = sobitichModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (sobitichModel.NGUOIDODAUID == sobitichModel.MAGIAODAN && sobitichModel.MAGIAODAN.HasValue)
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Người đỡ đầu không được trùng với giáo dân đang chỉnh sửa.";
                }
                else if (SOBITICHService.Check_Insert_SOBITICH(sobitich))
                {
                    Exception exception;
                    //if (sobitich.MALINHMUC.HasValue)
                    //    sobitich.TENLINHMUC = sobitich.PRT_LINHMUC.GetFullName();
                    //if (sobitich.NGUOIDODAUID.HasValue)
                    //    sobitich.TENNGUOIDODAU = sobitich.PRT_GIAODAN_NGUOIDODAU.GetFullName();
                    sobitich.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                TempData["Result"] = ex.EXCEPTIONID;
            }
            return
                Redirect(
                    Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { id = sobitichModel.MAGIAODAN, area = "AdminCP" }) +
                   "#tabs-2");
        }

        public ActionResult ViewUserControlRuaToi(GIAODANModel giaodanModel)
        {
            SOBITICH sobitich = new SOBITICH();
            sobitich.MAGIAODAN = giaodanModel.MAGIAODAN;
            sobitich.MABITICH = 1;
            sobitich.Select();
            if (!sobitich.IsPersistence)
                sobitich.Insert();

            ViewData["ruatoi"] = "ruatoi";

            SOBITICHModel sobitichModel = new SOBITICHModel(sobitich);
            //if (sobitich.PRT_GIAODAN_NGUOIDODAU.IsPersistence)
            //    sobitichModel.TENNGUOIDODAU = sobitich.PRT_GIAODAN_NGUOIDODAU.GetFullName();
            //if (sobitich.PRT_LINHMUC.IsPersistence)
            //    sobitichModel.TENLINHMUC = sobitich.PRT_LINHMUC.GetFullName();
            return View(sobitichModel);
        }

        public ActionResult ViewUserControlRuocLe(GIAODANModel giaodanModel)
        {
            SOBITICH sobitich = new SOBITICH();
            sobitich.MAGIAODAN = giaodanModel.MAGIAODAN;
            sobitich.MABITICH = 2;
            sobitich.Select();
            if (!sobitich.IsPersistence)
                sobitich.Insert();
            ViewData["ruocle"] = "ruocle";

            SOBITICHModel sobitichModel = new SOBITICHModel(sobitich);
            //if (sobitich.PRT_GIAODAN_NGUOIDODAU.IsPersistence)
            //    sobitichModel.TENNGUOIDODAU = sobitich.PRT_GIAODAN_NGUOIDODAU.GetFullName();
            //if (sobitich.PRT_LINHMUC.IsPersistence)
            //    sobitichModel.TENLINHMUC = sobitich.PRT_LINHMUC.GetFullName();
            return View(sobitichModel);
        }

        public ActionResult ViewUserControlThemSuc(GIAODANModel giaodanModel)
        {
            SOBITICH sobitich = new SOBITICH();
            sobitich.MAGIAODAN = giaodanModel.MAGIAODAN;
            sobitich.MABITICH = 3;
            sobitich.Select();
            if (!sobitich.IsPersistence)
                sobitich.Insert();
            ViewData["themsuc"] = "themsuc";

            SOBITICHModel sobitichModel = new SOBITICHModel(sobitich);
            //if (sobitich.PRT_GIAODAN_NGUOIDODAU.IsPersistence)
            //    sobitichModel.TENNGUOIDODAU = sobitich.PRT_GIAODAN_NGUOIDODAU.GetFullName();
            //if (sobitich.PRT_LINHMUC.IsPersistence)
            //    sobitichModel.TENLINHMUC = sobitich.PRT_LINHMUC.GetFullName();
            return View(sobitichModel);
        }

        public ActionResult TimLinhMuc()
        {
            return View();
        }

        #endregion

        #region Hon Nhan

        public ActionResult ViewUserControl_HonNhan_TanHien(string id)
        {
            GIAODAN giaodan = new GIAODAN();
            Guid guid;
            if (Guid.TryParse(id, out guid))
                giaodan.MAGIAODAN = guid;
            giaodan.SelectbyId();
            if (giaodan.IsPersistence)
                ViewData["GENDERID"] = giaodan.GIOITINH == true ? "1" : "";
            else
                return Content("");
            return View(new GIAODANModel(giaodan));
        }

        public ActionResult ViewUserControlHonNhan(GIAODANModel giaodanModel)
        {
            SOHONNHAN temp = new SOHONNHAN();
            bool Female = false;
            bool isUpdate = false;
            if (giaodanModel.GIOITINH.HasValue)
                if (giaodanModel.GIOITINH.Value)
                {
                    temp.MAGIAODAN_VO = giaodanModel.MAGIAODAN;
                    Female = true;
                }
                else
                    temp.MAGIAODAN_CHONG = giaodanModel.MAGIAODAN;
            else
                temp.MAGIAODAN_CHONG = giaodanModel.MAGIAODAN;

            SOHONNHAN sohonnhan = null;
            foreach (SOHONNHAN sohonnhan1 in InfoTech.Core.Data.Receiver.TypeObject<SOHONNHAN>.SelectMany(temp))
            {
                if (sohonnhan1.LYHON.HasValue)
                {
                    if (!sohonnhan1.LYHON.Value)
                        sohonnhan = sohonnhan1;
                }
                else
                    sohonnhan = sohonnhan1;
            }

            if (sohonnhan == null)
            {
                sohonnhan = new SOHONNHAN();
                sohonnhan.MAGIAODAN_CHONG = temp.MAGIAODAN_CHONG;
                sohonnhan.MAGIAODAN_VO = temp.MAGIAODAN_VO;
            }
            else
            {
                isUpdate = true;
                //GIAODAN honthe = null;
                //if (Female)
                //{
                //    if (sohonnhan.PRT_GIAODAN_CHONG.IsPersistence)
                //    {
                //        sohonnhan.TENCHONG = sohonnhan.PRT_GIAODAN_CHONG.GetFullName();
                //        honthe = sohonnhan.PRT_GIAODAN_CHONG;
                //    }
                //}
                //else
                //{
                //    if (sohonnhan.PRT_GIAODAN_VO.IsPersistence)
                //    {
                //        sohonnhan.TENVO = sohonnhan.PRT_GIAODAN_VO.GetFullName();
                //        honthe = sohonnhan.PRT_GIAODAN_VO;
                //    }
                //}
                //if (honthe != null)
                //{
                //    if (honthe.PRT_GIAODAN_CHA.IsPersistence)
                //        sohonnhan.TENCHA = honthe.PRT_GIAODAN_CHA.GetFullName();
                //    if (honthe.PRT_GIAODAN_ME.IsPersistence)
                //        sohonnhan.TENME = honthe.PRT_GIAODAN_ME.GetFullName();
                //}
                //if (sohonnhan.PRT_GIAODAN_NHANCHUNG1.IsPersistence)
                //    sohonnhan.TENNHANCHUNG1 = sohonnhan.PRT_GIAODAN_NHANCHUNG1.GetFullName();
                //if (sohonnhan.PRT_GIAODAN_NHANCHUNG2.IsPersistence)
                //    sohonnhan.TENNHANCHUNG2 = sohonnhan.PRT_GIAODAN_NHANCHUNG2.GetFullName();
                //if (sohonnhan.PRT_LINHMUC.IsPersistence)
                //    sohonnhan.TENLINHMUC = sohonnhan.PRT_LINHMUC.GetFullName();
            }

            if (Female)
            {
                sohonnhan.TENVO = giaodanModel.GetFullName();
                sohonnhan.MAGIAODAN_VO = giaodanModel.MAGIAODAN;
                SOHONNHANModel sohonnhanModel = new SOHONNHANModel(sohonnhan);
                sohonnhanModel.UPDATE = isUpdate;
                sohonnhanModel.SEX = true;
                if (sohonnhan.MAGIAODAN_CHONG.HasValue)
                {
                    if (sohonnhan.PRT_GIAODAN_CHONG.IsPersistence)
                    {
                        sohonnhanModel.TENCHA = sohonnhan.PRT_GIAODAN_CHONG.TENCHA;
                        sohonnhanModel.TENME = sohonnhan.PRT_GIAODAN_CHONG.TENME;
                    }
                }
                return View("ViewUserControlHonNhan_Chong", sohonnhanModel);
            }
            else
            {
                sohonnhan.TENCHONG = giaodanModel.GetFullName();
                sohonnhan.MAGIAODAN_CHONG = giaodanModel.MAGIAODAN;
                SOHONNHANModel sohonnhanModel = new SOHONNHANModel(sohonnhan);
                sohonnhanModel.UPDATE = isUpdate;
                sohonnhanModel.SEX = false;
                if (sohonnhan.MAGIAODAN_VO.HasValue)
                {
                    if (sohonnhan.PRT_GIAODAN_VO.IsPersistence)
                    {
                        sohonnhanModel.TENCHA = sohonnhan.PRT_GIAODAN_VO.TENCHA;
                        sohonnhanModel.TENME = sohonnhan.PRT_GIAODAN_VO.TENME;
                    }
                }
                return View("ViewUserControlHonNhan_Vo", sohonnhanModel);
            }
        }

        public ActionResult ViewUserControlHonNhan_Chong(SOHONNHANModel sohonnhanModel)
        {
            return View(sohonnhanModel);
        }

        public ActionResult ViewUserControlHonNhan_Vo(SOHONNHANModel sohonnhanModel)
        {
            return View(sohonnhanModel);
        }

        public ActionResult TimVo()
        {
            return View();
        }

        public ActionResult TimChong()
        {
            return View();
        }

        public ActionResult Get_List_GiaoDan_Vo()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<Guid> temp1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH == true)
                .Join(dataContext.GetTable<SOHONNHAN>().Where(c => c.LYHON.HasValue == false || c.LYHON == false), c => c.MAGIAODAN, v => v.MAGIAODAN_VO, (c, v) => c.MAGIAODAN);
            IQueryable<GIAODAN> query1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH == true && !temp1.Contains(c.MAGIAODAN));

            IQueryable<dynamic> query;

            if (typeof(GIAOHO).CheckPropertyInfo(grid))
                query = query1.Where(grid).Join(dataContext.GetTable<GIAOHO>().Where(grid), c => c.MAGIAOHO,
                                                             v => v.MAGIAOHO,
                                                             (c, v) => new
                                                             {
                                                                 c.MAGIAODAN,
                                                                 c.TENTHANH,
                                                                 c.HOVATENDEM,
                                                                 c.TEN,
                                                                 c.DANTOC,
                                                                 c.GIAODANID,
                                                                 v.TENGIAOHO,
                                                                 NAMSINH = c.GetBirthDay(),
                                                                 TATHE = Format_GIAODAN_TATHE(c),
                                                                 c.TENCHA,
                                                                 c.TENME
                                                             });
            else
                query = query1.Where(grid).GroupJoin(dataContext.GetTable<GIAOHO>(),
                                                                              c => c.MAGIAOHO,
                                                                              v => v.MAGIAOHO,
                                                                              (c, v) => new { c, v }).SelectMany(
                                                                                  t => t.v.DefaultIfEmpty(),
                                                                                  (t, v) => new
                                                                                  {
                                                                                      t.c.MAGIAODAN,
                                                                                      t.c.TENTHANH,
                                                                                      t.c.HOVATENDEM,
                                                                                      t.c.TEN,
                                                                                      t.c.DANTOC,
                                                                                      t.c.GIAODANID,
                                                                                      v.TENGIAOHO,
                                                                                      NAMSINH = t.c.GetBirthDay(),
                                                                                      TATHE = Format_GIAODAN_TATHE(t.c),
                                                                                      t.c.TENCHA,
                                                                                      t.c.TENME
                                                                                  });

            //filtering
            //query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Get_List_GiaoDan_Chong()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<Guid> temp1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH != true)
                .Join(dataContext.GetTable<SOHONNHAN>().Where(c => c.LYHON.HasValue == false || c.LYHON == false), c => c.MAGIAODAN, v => v.MAGIAODAN_CHONG, (c, v) => c.MAGIAODAN);
            IQueryable<GIAODAN> query1 = dataContext.GetTable<GIAODAN>().Where(c => c.GIOITINH != true && !temp1.Contains(c.MAGIAODAN));

            IQueryable<dynamic> query;

            if (typeof(GIAOHO).CheckPropertyInfo(grid))
                query = query1.Where(grid).Join(dataContext.GetTable<GIAOHO>().Where(grid), c => c.MAGIAOHO,
                                                             v => v.MAGIAOHO,
                                                             (c, v) => new
                                                             {
                                                                 c.MAGIAODAN,
                                                                 c.TENTHANH,
                                                                 c.HOVATENDEM,
                                                                 c.TEN,
                                                                 c.DANTOC,
                                                                 c.GIAODANID,
                                                                 v.TENGIAOHO,
                                                                 NAMSINH = c.GetBirthDay(),
                                                                 TATHE = Format_GIAODAN_TATHE(c),
                                                                 c.TENCHA,
                                                                 c.TENME
                                                             });
            else
                query = query1.Where(grid).GroupJoin(dataContext.GetTable<GIAOHO>(),
                                                                              c => c.MAGIAOHO,
                                                                              v => v.MAGIAOHO,
                                                                              (c, v) => new { c, v }).SelectMany(
                                                                                  t => t.v.DefaultIfEmpty(),
                                                                                  (t, v) => new
                                                                                  {
                                                                                      t.c.MAGIAODAN,
                                                                                      t.c.TENTHANH,
                                                                                      t.c.HOVATENDEM,
                                                                                      t.c.TEN,
                                                                                      t.c.DANTOC,
                                                                                      t.c.GIAODANID,
                                                                                      v.TENGIAOHO,
                                                                                      NAMSINH = t.c.GetBirthDay(),
                                                                                      TATHE = Format_GIAODAN_TATHE(t.c),
                                                                                      t.c.TENCHA,
                                                                                      t.c.TENME
                                                                                  });

            //filtering
            //query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult TimPhuThan2(string id)
        {
            ViewData["ID"] = id;
            return View();
        }

        public ActionResult TimLinhMuc1()
        {
            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult UpdateSoHonNhan(SOHONNHANModel sohonnhanModel)
        {
            EXCEPTION ex = new EXCEPTION();
            ex.UPDATETYPE = UpdateType.INSERT;

            if (ModelState.IsValid)
            {
                SOHONNHAN sohonnhan = sohonnhanModel;

                if (SOHONNHANService.Check_Insert_SOHONNHAN(sohonnhan))
                {
                    //if (sohonnhan.MAGIAODAN_CHONG.HasValue)
                    //    sohonnhan.TENCHONG = sohonnhan.PRT_GIAODAN_CHONG.GetFullName();
                    //if (sohonnhan.MAGIAODAN_VO.HasValue)
                    //    sohonnhan.TENVO = sohonnhan.PRT_GIAODAN_VO.GetFullName();
                    //if (sohonnhanModel.SEX)
                    //{
                    //    sohonnhan.TENCHA = sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_CHA.GetFullName();
                    //    sohonnhan.TENME = sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_ME.GetFullName();
                    //}
                    //else
                    //{
                    //    sohonnhan.TENCHA = sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_CHA.GetFullName();
                    //    sohonnhan.TENME = sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_ME.GetFullName();
                    //}
                    //if (sohonnhan.MANHANCHUNG1.HasValue)
                    //    sohonnhan.TENNHANCHUNG1 = sohonnhan.PRT_GIAODAN_NHANCHUNG1.GetFullName();
                    //if (sohonnhan.MANHANCHUNG2.HasValue)
                    //    sohonnhan.TENNHANCHUNG2 = sohonnhan.PRT_GIAODAN_NHANCHUNG2.GetFullName();

                    Exception exception;
                    if (sohonnhanModel.UPDATE)
                        sohonnhan.UpdatebyId(out exception);
                    else
                        sohonnhan.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //sohonnhanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
            }
            else
            {
                ex.RESULTTYPE = ResultType.ERROR;
                ex.MESSAGE = "Có lỗi trong quá trình cập nhật<br/>Vui lòng thử lại sau";
            }
            ex.Insert();
            TempData["Result"] = ex.EXCEPTIONID;

            Guid? guid = sohonnhanModel.SEX ? sohonnhanModel.MAGIAODAN_VO : sohonnhanModel.MAGIAODAN_CHONG;
            return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { id = guid, area = "AdminCP" }) + "#tabs-3");
        }

        public ActionResult SoHonNhan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaDinhCongGiao_Index";
            header.CurentCommon = "GiaDinhCongGiao";
            header.PageTitle = "Sổ Hôn Nhân - Gia Đình Công  Giáo";
            header.PageHeader = "Sổ Hôn Nhân - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0205";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_SoHonNhan()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<SOHONNHAN> query = dataContext.GetTable<SOHONNHAN>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<SOHONNHAN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<SOHONNHAN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<SOHONNHAN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<SOHONNHAN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<SOHONNHAN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new { c.MASO, c.MAHONNHAN, TENCHONG = Format_Chong(c.MAGIAODAN_CHONG, c.TENCHONG), TENVO = Format_Vo(c.MAGIAODAN_VO, c.TENVO), NGAYDANGKY = c.GetNgayCuoi(), EDIT = Format_SOHONNHAN_Edit(c), LYHON = Format_SOHONNHAN_LyHon(c) })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        private string Format_SOHONNHAN_LyHon(SOHONNHAN sohonnhan)
        {
            string result = "";
            if (sohonnhan.LYHON.HasValue)
                if (sohonnhan.LYHON.Value)
                    result = string.Format("<img src=\"{0}icons/cross.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP"), Url.Action("EditSoHonNhan", new { id = sohonnhan.MAHONNHAN }));
            return result;
        }

        private string Format_SOHONNHAN_Edit(SOHONNHAN sohonnhan)
        {
            string result = string.Format("<img src=\"{0}icons/pencil.png\" style=\"cursor:pointer\" onclick=\"javascript:window.location='{1}'\" />", Server.AreaImagesVitualPath("AdminCP"), Url.Action("EditSoHonNhan", new { id = sohonnhan.MAHONNHAN }));
            return result;
        }

        public string Format_GIAODAN_Link_EditTab(GIAODAN giaodan)
        {
            return String.Format("<a href=\"{0}\">{1}</a>", Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = giaodan.MAGIAODAN })
                   , giaodan.GetFullName());
        }

        public string Format_GIAODAN_Link_HonNhanTab(Guid MAGIAODAN, string fullName)
        {
            return String.Format("<a href=\"{0}\">{1}</a>", Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = MAGIAODAN }) +
                   "#tabs-3", fullName);
        }

        private string Format_Chong(Guid? MAGIAODAN_CHONG, string TENCHONG)
        {
            if (MAGIAODAN_CHONG.HasValue)
                return Format_GIAODAN_Link_HonNhanTab(MAGIAODAN_CHONG.Value, TENCHONG);
            return TENCHONG;
        }

        private string Format_Vo(Guid? MAGIAODAN_VO, string TENVO)
        {
            if (MAGIAODAN_VO.HasValue)
                return Format_GIAODAN_Link_HonNhanTab(MAGIAODAN_VO.Value, TENVO);
            return TENVO;
        }

        public ActionResult EditSoHonNhan(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                SOHONNHAN sohonnhan = new SOHONNHAN();
                sohonnhan.MAHONNHAN = guid;
                sohonnhan.SelectbyId();
                if (sohonnhan.IsPersistence)
                {
                    SOHONNHANModel sohonnhanModel = new SOHONNHANModel(sohonnhan);
                    if (sohonnhan.PRT_GIAODAN_CHONG.IsPersistence)
                    {
                        sohonnhanModel.TENCHONG = sohonnhan.PRT_GIAODAN_CHONG.GetFullName();
                        sohonnhanModel.TENCHA_CHONG = sohonnhan.PRT_GIAODAN_CHONG.TENCHA;
                        sohonnhanModel.TENME_CHONG = sohonnhan.PRT_GIAODAN_CHONG.TENME;
                        //if (sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_CHA.IsPersistence)
                        //{
                        //    sohonnhanModel.TENCHA_CHONG = sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_CHA.GetFullName();
                        //}
                        //else
                        //    sohonnhanModel.TENCHA_CHONG = sohonnhan.PRT_GIAODAN_CHONG.TENCHA;
                        //if (sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_ME.IsPersistence)
                        //{
                        //    sohonnhanModel.TENME_CHONG = sohonnhan.PRT_GIAODAN_CHONG.PRT_GIAODAN_ME.GetFullName();
                        //}
                        //else
                        //    sohonnhanModel.TENME_CHONG = sohonnhan.PRT_GIAODAN_CHONG.TENME;
                    }
                    else
                    {
                        sohonnhanModel.TENCHA_CHONG = sohonnhan.TENCHA;
                        sohonnhanModel.TENME_CHONG = sohonnhan.TENME;
                    }
                    if (sohonnhan.PRT_GIAODAN_VO.IsPersistence)
                    {
                        sohonnhanModel.TENVO = sohonnhan.PRT_GIAODAN_VO.GetFullName();
                        sohonnhanModel.TENCHA_VO = sohonnhan.PRT_GIAODAN_VO.TENCHA;
                        sohonnhanModel.TENME_VO = sohonnhan.PRT_GIAODAN_VO.TENME;
                        //if (sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_CHA.IsPersistence)
                        //{
                        //    sohonnhanModel.TENCHA_VO = sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_CHA.GetFullName();
                        //}
                        //else
                        //    sohonnhanModel.TENCHA_VO = sohonnhan.PRT_GIAODAN_VO.TENCHA;
                        //if (sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_ME.IsPersistence)
                        //{
                        //    sohonnhanModel.TENME_VO = sohonnhan.PRT_GIAODAN_VO.PRT_GIAODAN_ME.GetFullName();
                        //}
                        //else
                        //    sohonnhanModel.TENME_VO = sohonnhan.PRT_GIAODAN_VO.TENME;
                    }
                    else
                    {
                        sohonnhanModel.TENCHA_VO = sohonnhan.TENCHA;
                        sohonnhanModel.TENME_VO = sohonnhan.TENME;
                    }
                    //if (sohonnhan.PRT_GIAODAN_NHANCHUNG1.IsPersistence)
                    //    sohonnhanModel.TENNHANCHUNG1 = sohonnhan.PRT_GIAODAN_NHANCHUNG1.GetFullName();
                    //if (sohonnhan.PRT_GIAODAN_NHANCHUNG2.IsPersistence)
                    //    sohonnhanModel.TENNHANCHUNG2 = sohonnhan.PRT_GIAODAN_NHANCHUNG2.GetFullName();

                    Header header = new Header();
                    header.Common = "ViewUserControl_EditHonNhan_Index";
                    header.CurentCommon = "";
                    header.PageTitle = "Sổ Hôn Nhân - Gia Đình Công Giáo";
                    header.PageHeader = "Cập Nhật Sổ Hôn Nhân - Gia Đình Công Giáo";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0205";
                    ViewData[Header.Key] = header;

                    return View(sohonnhanModel);
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("SoHonNhan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditSoHonNhan(SOHONNHANModel sohonnhanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_EditHonNhan_Index";
            header.CurentCommon = "";
            header.PageTitle = "Sổ Hôn Nhân - Gia Đình Công Giáo";
            header.PageHeader = "Cập Nhật Sổ Hôn Nhân - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0205";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                SOHONNHAN sohonnhan = sohonnhanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (SOHONNHANService.Check_Update_SOHONNHAN(sohonnhan))
                {
                    Exception exception;
                    sohonnhan.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //sohonnhanModel.NAME = "";
                        ModelState.Clear();
                        sohonnhanModel.MASO = sohonnhan.MASO;
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(sohonnhanModel);
        }

        public ActionResult DeleteSoHonNhan(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (SOHONNHANService.Check_Delete_SOHONNHAN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var sohonnhan = new SOHONNHAN();
                            sohonnhan.MAHONNHAN = guid;
                            Exception exception;
                            sohonnhan.SelectbyId();
                            if (sohonnhan.IsPersistence)
                            {
                                // Check service here
                                SOHONNHANService.Delete(sohonnhan);

                                sohonnhan.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        public ActionResult GetTenChaMe(string id)
        {
            string tenCha = "", tenMe = "";
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN();
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    if (giaodan.PRT_GIAODAN_CHA.IsPersistence)
                        tenCha = giaodan.PRT_GIAODAN_CHA.GetFullName();
                    else
                        tenCha = giaodan.TENCHA;
                    if (giaodan.PRT_GIAODAN_ME.IsPersistence)
                        tenMe = giaodan.PRT_GIAODAN_ME.GetFullName();
                    else
                        tenMe = giaodan.TENME;
                }
            }
            return Json(new { cha = tenCha, me = tenMe }, JsonRequestBehavior.AllowGet);
        }

        #endregion

        #region Tận Hiến

        public ActionResult ViewUserControl_TanHien(string id)
        {
            GIAODAN giaodan = new GIAODAN();
            Guid guid;
            if (Guid.TryParse(id, out guid))
                giaodan.MAGIAODAN = guid;
            giaodan.SelectbyId();
            if (giaodan.IsPersistence)
            {
                return View(new GIAODANModel(giaodan));
            }
            return Content("Reserved for future.");
        }

        public ActionResult ViewUserControl_TanHien1(SOTANHIENModel sotanhienModel)
        {
            ModelState.Clear();
            return View(sotanhienModel);
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult UpdateSoTanHien(SOTANHIENModel sotanhienModel)
        {
            EXCEPTION ex = new EXCEPTION();
            ex.UPDATETYPE = UpdateType.UPDATE;
            if (ModelState.IsValid)
            {
                SOTANHIEN sotanhien = sotanhienModel;
                if (SOTANHIENService.Check_Update_SOTANHIEN(sotanhien))
                {
                    Exception exception;
                    if (sotanhienModel.Delete)
                    {
                        sotanhien.DeletebyId(out exception);
                        ex.UPDATETYPE = UpdateType.DELETE;
                    }
                    else if (sotanhienModel.Insert)
                    {
                        sotanhien.Insert(out exception);
                        ex.UPDATETYPE = UpdateType.INSERT;
                    }
                    else
                    {
                        sotanhien.UpdatebyId(out exception);
                        ex.UPDATETYPE = UpdateType.UPDATE;
                    }
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //sotanhienModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
            }
            else
            {
                ex.RESULTTYPE = ResultType.ERROR;
                ex.MESSAGE = "Có lỗi trong quá trình cập nhật<br/>Vui lòng thử lại sau";

            }
            ex.Insert();
            TempData["Result"] = ex.EXCEPTIONID;
            return
                Redirect(
                    Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { id = sotanhienModel.MAGIAODAN, area = "AdminCP" }) +
                    "#tabs-4");
        }

        #endregion

        #region Ta The

        public ActionResult ViewUserControl_TaThe(string id)
        {
            SOTATHE sotathe = new SOTATHE();
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                sotathe.MAGIAODAN = guid;
                sotathe.Select();
                SOTATHEModel sotatheModel;
                if (sotathe.IsPersistence)
                {
                    sotatheModel = new SOTATHEModel(sotathe);
                }
                else
                {
                    sotatheModel = new SOTATHEModel() { MAGIAODAN = guid };
                }
                return View(sotatheModel);
            }

            return Content("");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult ViewUserControl_TaThe(SOTATHEModel sotatheModel)
        {
            if (ModelState.IsValid)
            {
                SOTATHE sotathe = sotatheModel;
                EXCEPTION ex = new EXCEPTION();
                if (sotatheModel.Delete)
                {
                    ex.UPDATETYPE = UpdateType.DELETE;
                    Exception exception;
                    sotathe.DeletebyId(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.UPDATETYPE = UpdateType.INSERT;
                    if (SOTATHEService.Check_Insert_SOTATHE(sotathe))
                    {
                        Exception exception;
                        sotathe.Insert(out exception);
                        if (exception == null)
                        {
                            //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                            //sotatheModel.NAME = "";
                            ex.RESULTTYPE = ResultType.SUCESS;
                            ex.MESSAGE = "Cập nhật thành công";
                        }
                        else
                        {
                            ex.MESSAGE = exception.Message;
                            ex.RESULTTYPE = ResultType.ERROR;
                        }
                    }
                    else
                    {
                        ex.RESULTTYPE = ResultType.ATTENTION;
                        ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                    }
                }
                ex.Insert();
                TempData["Result"] = ex.EXCEPTIONID;
            }
            return
                Redirect(
                    Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = sotatheModel.MAGIAODAN }) +
                    "#tabs-6");
        }

        #endregion

        #region Xuc Dau

        public ActionResult ViewUserControl_XucDau(string id)
        {
            ViewData["ID"] = id;
            return View();
            //return Content("Reserved for future.");
        }

        public ActionResult Get_List_XucDau()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<SOXUCDAU> query = dataContext.GetTable<SOXUCDAU>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<SOXUCDAU>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<SOXUCDAU>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<SOXUCDAU>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<SOXUCDAU>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<SOXUCDAU>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.OrderBy(c => c.NAM).ThenBy(c => c.THANG).ThenBy(c => c.NGAY).Select(c => new
                                            {
                                                c.MAXUCDAU,
                                                NGAYXUCDAU = c.GetDay(),
                                                TENLINHMUC = c.PRT_LINHMUC.IsPersistence ? c.PRT_LINHMUC.GetFullName() : c.TENLINHMUC
                                            })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddXucDau(string id)
        {
            GIAODAN giaodan = new GIAODAN();
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                giaodan.MAGIAODAN = guid;
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_XucDau_Index";
                    header.CurentCommon = "";
                    header.PageTitle = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
                    header.PageHeader = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0202";
                    ViewData[Header.Key] = header;
                    ViewData["MAGIAODAN"] = id;

                    SOXUCDAUModel soxucdauModel = new SOXUCDAUModel() { MAGIAODAN = giaodan.MAGIAODAN };
                    return View(soxucdauModel);
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = id }) + "#tabs-4");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddXucDau(SOXUCDAUModel soxucdauModel)
        {
            if (ModelState.IsValid)
            {
                SOXUCDAU soxucdau = soxucdauModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (SOXUCDAUService.Check_Insert_SOXUCDAU(soxucdau))
                {
                    Exception exception;
                    soxucdau.Insert(out exception);
                    if (exception == null)
                    {
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                TempData["Result"] = ex.EXCEPTIONID;
                return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = soxucdauModel.MAGIAODAN }) + "#tabs-5");
            }
            Header header = new Header();
            header.Common = "ViewUserControl_XucDau_Index";
            header.CurentCommon = "";
            header.PageTitle = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
            header.PageHeader = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;
            ViewData["MAGIAODAN"] = soxucdauModel.MAGIAODAN;

            return View(soxucdauModel);
        }

        public ActionResult EditXucDau(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                SOXUCDAU soxucdau = new SOXUCDAU();
                soxucdau.MAXUCDAU = guid;
                soxucdau.SelectbyId();
                if (soxucdau.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_XucDau_Index";
                    header.CurentCommon = "";
                    header.PageTitle = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
                    header.PageHeader = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
                    header.Menulv1 = "02";
                    header.Menulv2 = "0202";
                    ViewData[Header.Key] = header;
                    ViewData["MAGIAODAN"] = soxucdau.MAGIAODAN;

                    SOXUCDAUModel soxucdauModel = new SOXUCDAUModel(soxucdau);
                    if (soxucdau.PRT_LINHMUC.IsPersistence)
                        soxucdauModel.TENLINHMUC = soxucdau.PRT_LINHMUC.GetFullName();

                    return View(new SOXUCDAUModel(soxucdau));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoDan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditXucDau(SOXUCDAUModel soxucdauModel)
        {
            if (ModelState.IsValid)
            {
                SOXUCDAU soxucdau = soxucdauModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (SOXUCDAUService.Check_Update_SOXUCDAU(soxucdau))
                {
                    Exception exception;
                    soxucdau.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //soxucdauModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                        ex.Insert();
                        TempData["Result"] = ex.EXCEPTIONID;
                        return Redirect(Url.Action("EditGiaoDan", "GiaDinhCongGiao", new { area = "AdminCP", id = soxucdauModel.MAGIAODAN }) + "#tabs-5");

                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            Header header = new Header();
            header.Common = "ViewUserControl_XucDau_Index";
            header.CurentCommon = "";
            header.PageTitle = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
            header.PageHeader = "Xức Dầu Bệnh Nhân - Gia Đình Công Giáo";
            header.Menulv1 = "02";
            header.Menulv2 = "0202";
            ViewData[Header.Key] = header;
            ViewData["MAGIAODAN"] = soxucdauModel.MAGIAODAN;

            return View(soxucdauModel);
        }

        public ActionResult DeleteXucDau(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (SOXUCDAUService.Check_Delete_SOXUCDAU(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var soxucdau = new SOXUCDAU();
                            soxucdau.MAXUCDAU = guid;
                            Exception exception;
                            soxucdau.SelectbyId();
                            if (soxucdau.IsPersistence)
                            {
                                // Check service here
                                SOXUCDAUService.Delete(soxucdau);

                                soxucdau.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Dropdown data

        [HttpPost]
        public ActionResult Get_GIAOHAT(string id)
        {
            return Json(GIAOHATService.Get_List_Join_GiaoPhan(id), JsonRequestBehavior.DenyGet);
        }

        [HttpPost]
        public ActionResult Get_GIAOXU(string id)
        {
            return Json(GIAOXUService.Get_List_Join_GiaoPhan_GiaoHat(id), JsonRequestBehavior.DenyGet);
        }

        [HttpPost]
        public ActionResult Get_GIAOHO(string id)
        {
            return Json(GIAOHOService.Get_List_Join_GiaoPhan_GiaoHat_GiaoXu(id), JsonRequestBehavior.DenyGet);
        }

        [HttpPost]
        public ActionResult Get_TINHTHANH(string id)
        {
            return Json(TINHTHANHService.Get_List_Join_Country(id), JsonRequestBehavior.DenyGet);
        }

        [HttpPost]
        public ActionResult Get_QUANHUYEN(string id)
        {
            return Json(QUANHUYENService.Get_List_Join_City_Country(id), JsonRequestBehavior.DenyGet);
        }

        [HttpPost]
        public ActionResult Get_XAPHUONG(string id)
        {
            return Json(XAPHUONGService.Get_List_Join_City_Country_District(id), JsonRequestBehavior.DenyGet);
        }

        #endregion

        #region Reports

        public ActionResult GiayGioiThieuKetHon(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAODAN giaodan = new GIAODAN() { MAGIAODAN = guid };
                giaodan.SelectbyId();
                if (giaodan.IsPersistence)
                {
                    if (giaodan.GIOITINH.HasValue)
                        if (giaodan.GIOITINH.Value)
                            return RedirectToAction("GiayGioiThieuKetHon_Chong", giaodan);
                    return RedirectToAction("GiayGioiThieuKetHon_Vo", giaodan);
                }
            }
            return Content("");
        }

        public ActionResult GiayGioiThieuKetHon_Chong(GIAODAN giaodan)
        {
            SOHONNHANModel sohonnhanModel = new SOHONNHANModel();
            sohonnhanModel.TENVO = giaodan.GetFullName();
            sohonnhanModel.TENCHA_VO = giaodan.TENCHA;
            sohonnhanModel.TENME_VO = giaodan.TENME;
            sohonnhanModel.DIACHI = giaodan.DIACHI;
            ViewData["NGAYSINH_VO"] = giaodan.GetBirthDay();
            if (Session["SOHONNHAN"] != null)
                Session.Remove("SOHONNHAN");

            string tengiaophan = "";
            Guid guid;
            CONFIGURATION configuration_GIAOPHAN = new CONFIGURATION();
            configuration_GIAOPHAN.ID = CONFIGURATION.DEFAULT_GIAOPHAN;
            configuration_GIAOPHAN.Select();
            if (configuration_GIAOPHAN.IsPersistence)
            {
                if (Guid.TryParse(configuration_GIAOPHAN.VALUE, out guid))
                {
                    GIAOPHAN giaophan = new GIAOPHAN() { MAGIAOPHAN = guid };
                    giaophan.SelectbyId();
                    if (giaophan.IsPersistence)
                        tengiaophan = giaophan.TENGIAOPHAN;
                }
            }

            string tenGiaoXu = "";
            CONFIGURATION configuration_GIAOXU = new CONFIGURATION();
            configuration_GIAOXU.ID = CONFIGURATION.DEFAULT_GIAOXU;
            configuration_GIAOXU.Select();
            if (configuration_GIAOXU.IsPersistence)
            {
                if (Guid.TryParse(configuration_GIAOXU.VALUE, out guid))
                {
                    GIAOXU giaoxu = new GIAOXU() { MAGIAOXU = guid };
                    giaoxu.SelectbyId();
                    if (giaoxu.IsPersistence)
                    {
                        tenGiaoXu = giaoxu.TENGIAOXU;
                    }
                }
            }

            foreach (SOBITICH sobitich in giaodan.REF_SOBITICH)
            {
                if (sobitich.MABITICH.HasValue)
                {
                    if (sobitich.MABITICH.Value == 1)
                    {
                        if (string.IsNullOrEmpty(sobitich.DIADIEM))
                            sohonnhanModel.DIACHI_RUATOI = string.Format("Giáo xứ {0} - Giáo phận {1}", tenGiaoXu,
                                                                         tengiaophan);
                        else
                            sohonnhanModel.DIACHI_RUATOI = sobitich.DIADIEM;
                    }
                    else if (sobitich.MABITICH.Value == 1)
                    {
                        if (string.IsNullOrEmpty(sobitich.DIADIEM))
                            sohonnhanModel.DIACHI_RUATOI = string.Format("Giáo xứ {0} - Giáo phận {1}", tenGiaoXu,
                                                                         tengiaophan);
                        else
                            sohonnhanModel.DIACHI_THEMSUC = sobitich.DIADIEM;
                    }
                }
            }

            return View(sohonnhanModel);
        }

        public ActionResult GiayGioiThieuKetHon_Vo(GIAODANModel giaodanModel)
        {
            return View(giaodanModel);
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult GiayGioiThieuKetHon_Chong(SOHONNHANModel sohonnhanModel)
        {
            Session["SOHONNHAN"] = sohonnhanModel;
            return View(sohonnhanModel);
        }

        #endregion

    }
}
